如何在LINQ中构造动态查询

本文关键字:动态 查询 LINQ | 更新日期: 2023-09-27 18:11:46

用户在文本框中键入要在旅行目的地中查找的关键字。有时,他们只是键入"热",有时"湿热暴风雨",等等

此代码适用于单个关键字:

where d.Element("Description").Value.Contains(textBox1.Text)

如何修改代码以构建查询,使其适用于任意数量的关键字?请注意,在文本框中键入的所有关键字都必须匹配。

如何在LINQ中构造动态查询

首先,我为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)))

您可以使用AllAny方法。这取决于你的需要。