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

前端之家收集整理的这篇文章主要介绍了LINQ to SQL – 选择字符串数组之类的文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个List< 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>>
              (Expression.AndAlso(expr1.Body,expr1.Parameters);
    }
}
}

我建议去网站寻找代码和解释.

(我要留下第一个答案,因为如果你需要一个IN声明它会很好用)

猜你在找的MsSQL相关文章