如何在LINQ中构造动态查询
本文关键字:动态 查询 LINQ | 更新日期: 2023-09-27 18:11:46
用户在文本框中键入要在旅行目的地中查找的关键字。有时,他们只是键入"热",有时"湿热暴风雨",等等
此代码适用于单个关键字:
where d.Element("Description").Value.Contains(textBox1.Text)
如何修改代码以构建查询,使其适用于任意数量的关键字?请注意,在文本框中键入的所有关键字都必须匹配。
首先,我为String
定义一个ContainAny
扩展方法,以封装在String
中查找多个值
public static bool ContainsAny(this string source, IEnumerable<string> values) {
foreach (var cur in values) {
if (source.Contains(cur)) {
return true;
}
}
return false;
}
然后可以使用String.Split
方法将textBox1.Text
中的单词分解并将其提供给ContainsAny
where d.Element("Description").Value.ContainsAny(textBox1.Text.Split(' '));
我想你的意思是搜索是否有任何条目适用:
where textBox1.Text.Split(' ').All(t => d.Element("Description").Value.Contains(t))
var keywords = textBox1.Text.Split(' ');
//-------
.Where(e => keywords.All(w => d.Element("Description").Value.Contains(w)))
您可以使用All
或Any
方法。这取决于你的需要。