gpt4 book ai didi

sql - LINQ to SQL - 选择文本之类的字符串数组

转载 作者:行者123 更新时间:2023-12-04 09:57:16 25 4
gpt4 key购买 nike

我有一个列表 <string > 变量计数,我想查询(通过 LINQ)一个表以查找包含 Text 列中任何这些字符串的任何项目。

试过这个(不起作用):

items = from dbt in database.Items
where (stringList.FindAll(s => dbt.Text.Contains(s)).Count > 0)
select dbt;

查询将类似于:
select * from items where text like '%string1%' or text like '%string2%'

这可能吗?

最佳答案

看看这篇文章,做你想做的事:
http://www.albahari.com/nutshell/predicatebuilder.aspx
这就像做梦一样。我基本上剪切并粘贴了他们的代码并将其取回(当然还有我自己的数据方案):

SELECT [t0].[Id], [t0].[DateCreated], [t0].[Name] ...
FROM [dbo].[Companies] AS [t0]
WHERE ([t0].[Name] LIKE @p0) OR ([t0].[Name] LIKE @p1)

这是我为概念验证运行的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace PredicateTest
{
class Program
{
static void Main(string[] args)
{
DataClasses1DataContext dataContext = new DataClasses1DataContext();

Program p = new Program();
Program.SearchCompanies("test", "test2");
var pr = from pi in dataContext.Companies.Where(Program.SearchCompanies("test", "test2")) select pi;
}

DataClasses1DataContext dataContext = new DataClasses1DataContext();

public static Expression<Func<Company, bool>> SearchCompanies(
params string[] keywords)
{
var predicate = PredicateBuilder.False<Company>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or(p => p.Name.Contains(temp));
}
return predicate;
}

}

public static class PredicateBuilder
{
public static Expression<Func<T, bool>> True<T>() { return f => true; }
public static Expression<Func<T, bool>> False<T>() { return f => false; }

public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}

public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
}
}
}

我建议去该网站获取代码和解释。

(我将留下第一个答案,因为如果您需要 IN 语句,它可以很好地工作)

关于sql - LINQ to SQL - 选择文本之类的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/512285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com