fre*_*hie 2 c# linq linq-to-sql
我想使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何编写第二个where子句搜索所有列?我想为每一列写一个where子句,但我想知道是否有更好的方法.
谢谢.
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();
}
Run Code Online (Sandbox Code Playgroud)
您应该只有一个 where 子句并将所有列的检查与||.
我有一个名为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();
Run Code Online (Sandbox Code Playgroud)
或者,如果要搜索所有字符串属性,可以执行以下操作:
var result = TheDC.SomeTable.Search(t => t.Id).EqualTo(TheIDs)
.Search().Containing(TheSearchTerm)
.Select(t => t.ID).ToList();
Run Code Online (Sandbox Code Playgroud)
这两种方法都将创建表达式树以向sql server发送正确的指令,这意味着只从数据库返回匹配的记录.