[英]Perform string search with Linq to Entities
我想在Linq to Entities中啟用此功能(因此過濾發生在SQL Server上)?
public static bool ContainsAny(this string source, StringComparison comparison,
IEnumerable<string> searchTerms)
{
return searchTerms.Any(searchTerm => source.Contains(searchTerm, comparison));
}
我的目標是搜索表並通過使用上述函數過濾某個列來限制結果,即GetContacts().Where(c => c.FullName.ContainAny(searchTerm))
。
首先,在Expressions中使用StringComprison並期望Linq 2實體將其轉換為正確的Sql語句是棘手的(如果可能的話,我不知道)。
其次,在Expression中使用像ContainsAny這樣的自定義函數也很棘手。
如果我是你,簡單的解決方案是:
GetContacts().Where(c => searchTerms.Any(term => c.FullName.Contains(term)))
哪個應該在EF4中工作。
看看我創建的nuget包
這將啟用以下(以及更多),這將返回搜索項出現在指定屬性中的結果
var result = GetContacts().Search("searchTerm", c => c.FullName);
要搜索多個術語,您可以執行以下操作:
var result = GetContacts().Search(searchTerms, c => c.FullName);
以上將返回任何搜索詞出現在屬性中的結果
這會構建一個表達式樹,它對數據庫而不是內存執行搜索,因此只從服務器返回匹配的結果。
有關更多信息,請查看項目GitHub頁面或我的博客文章
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.