我有以下内容,其中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包含多个单词,这些单词会将结果过滤到其中Keywords包含searchby中所有单词的记录。
提前致谢
答案 0 :(得分:1)
您可以使用其他集合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)))
答案 1 :(得分:-1)
这个答案假定,searchby是null
或数组。
由于仅包含对1个项目的检查,因此您需要找到一种方法来检查searchby
中的所有项目。我想到了Enumerable.All
- 方法。以下是相关部分:
searchby.All(searchItem => p.Keywords.Contains(searchItem))