簡體   English   中英

使用Linq to Entities執行字符串搜索

[英]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包

http://www.nuget.org/packages/NinjaNye.SearchExtensions

這將啟用以下(以及更多),這將返回搜索項出現在指定屬性中的結果

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM