簡體   English   中英

C#Linq多字搜索

[英]C# Linq multi-word search

我有以下內容,其中searchby是一個字符串

var products = db.Products
   .Where(p => p.Category.Name == category 
          && p.Active == true 
          && (searchby == null || (searchby != null && p.Keywords.Contains(searchby))))
   .Include(p => p.Category)
   .OrderBy(p => p.Description)
   .ThenBy(p => p.Name);

並希望對其進行更改以允許searchby包含多個單詞,這些單詞將過濾結果到記錄中,其中關鍵字包含searchby中的所有單詞。

提前致謝

您可以使用另一個集合,也可以使用Enumerable.All (不確定您的LINQ提供程序是否支持)或!Enumerable.Any

List<string> searchby = ... (empty if there is no filter)
var products = db.Products
   .Where(p => p.Category.Name == category 
          && p.Active == true 
          && !searchby.Any(s => !p.Keywords.Contains(s)))
   .Include(p => p.Category)
   .OrderBy(p => p.Description)
   .ThenBy(p => p.Name);

如果支持,則更易讀:

&& searchby.All(s => p.Keywords.Contains(s)))

該答案假定searchby為null或Array。

由於只包含一項檢查,因此您需要找到一種方法來檢查searchby所有項目。 我想到了Enumerable.All -Method。 這是相關的部分:

searchby.All(searchItem => p.Keywords.Contains(searchItem))

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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