如何使用Linq检查字符串列表是否包含列表中的任何字符串

Lra*_*ayh 15 c# linq contains list

我正在构建一个linq查询,它将检查DB中的字符串是否包含字符串列表中的任何字符串.

就像是.

query = query.Where(x => x.tags
                   .Contains(--any of the items in my list of strings--));
Run Code Online (Sandbox Code Playgroud)

我也想知道列表中有多少项是匹配的.

任何帮助,将不胜感激.

更新:我应该提到标签是一个字符串而不是列表.而且我在查询实际运行之前添加了几个与标签无关的内容.这是针对实体框架运行的.

Jon*_*eet 16

编辑:这个答案假设这tags是一个字符串的集合......

听起来你可能想要:

var list = new List<string> { ... };
var query = query.Where(x => x.tags.Any(tag => list.Contains(tag));
Run Code Online (Sandbox Code Playgroud)

要么:

var list = new List<string> { ... };
var query = query.Where(x => x.tags.Intersect(list).Any());
Run Code Online (Sandbox Code Playgroud)

(如果这是使用LINQ to SQL或EF,你可能会发现一个工作,但另一个工作没有.在LINQ to Objects中,两个都应该工作.)

要计算,你需要这样的东西:

var result = query.Select(x => new { x, count = x.tags.Count(tag => list.Contains(tag)) })
                  .Where(pair => pair.count != 0);
Run Code Online (Sandbox Code Playgroud)

然后每个元素result是一对x(项目)和count(匹配标签的数量).


ale*_*onj 6

我以前做过这样的事情:

var myList = new List<string>();
myList.Add("One");
myList.Add("Two");

var matches = query.Where(x => myList.Any(y => x.tags.Contains(y)));
Run Code Online (Sandbox Code Playgroud)


Ehs*_*jad 1

像这样:

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");

 var result = query.Where(x => list.Contains(x.tags));
Run Code Online (Sandbox Code Playgroud)

  • `Contains` 不接受项目序列作为参数 (2认同)
  • OP 指出 x.tags 是一个字符串,尽管我仍然不确定这个问题 (2认同)