2

我想使用 ling-to-sql 在多个列中搜索一个字符串,我想知道如何编写该where子句。这就是我所拥有的:我正在传递要搜索的 ID 列表以及搜索词:

public List<long> Seach(string TheSearchTerm, List<long> TheIDs)
{

using (SomeDataContext TheDC = new SomeDataContext())
{
    var TheOutput = (from t in TheDC.SomeTable

                     where TheIDs.Contains(t.ID) &&
                      where "TheSearchTerm is in one of the columns"

                     select t.ID).ToList();
    }
}

如何编写第二个where子句来搜索所有列?我想为每一列写一个 where 子句,但我想知道是否有更好的方法。

谢谢。

4

2 回答 2

6
var TheOutput = (from t in TheDC.SomeTable

                 where TheIDs.Contains(t.ID) && (
                 t.column1.Contains(TheSearchTerm) ||
                 t.column2.Contains(TheSearchTerm) ||
                 t.column3.Contains(TheSearchTerm) )           
                 select t.ID).ToList();
}

您应该只有一个 where 子句并将所有列的检查与||.

于 2013-08-17T19:38:19.373 回答
6

我有一个名为SearchExtensions的 nuget 包,它解决了这个问题:

var result = TheDC.SomeTable.Search(t => t.Id).EqualTo(TheIDs)
                            .Search(t => t.Column1, t => t.Column2, t => t.Column3)
                            .Containing(TheSearchTerm)
                            .Select(t => t.ID).ToList();

或者,如果您想搜索所有字符串属性,您可以执行以下操作:

var result = TheDC.SomeTable.Search(t => t.Id).EqualTo(TheIDs)
                            .Search().Containing(TheSearchTerm)
                            .Select(t => t.ID).ToList();

这两种方法都将创建表达式树以向 sql server 发送正确的指令,这意味着仅从数据库返回匹配的记录。

于 2015-10-01T22:21:03.213 回答