获取包含其他列表中每个字符串的列表中的每个项目

时间:2014-08-26 11:10:39

标签: c# linq

我基本上有两个字符串列表,并希望获取包含第二个列表中每个单词的第一个列表的元素。

List<Sentence> sentences = new List<Sentence> { many elements };

List<string> keyWords= new List<string>{"cat", "the", "house"};

class Sentence 
{
public string shortname {get; set; }
}

现在,如何对一个句子的keyWords-List的每个元素执行包含检查?像

这样的东西
var found = sentences.Where(x => x.shortname.ContainsAll(keyWords)));

3 个答案:

答案 0 :(得分:3)

试试这个:

var found = sentences.Where(x=> keyWords.All(y => x.shortname.Contains(y)));

All方法用于过滤掉包含关键字列表中所有关键字的句子。

答案 1 :(得分:1)

使用All

sentences.Where(x => keywords.All(k => x.shortname.Contains(k)));

如果您认为这是常见搜索,则可以创建自己的扩展方法

public static bool ContainsAll<T>(this IEnumerable<T> src, IEnumerable<T> target)
{
    return target.All(x => src.Contains(x));
}

这将允许您在原始表达时编写代码

sentences.Where(x => x.shortname.ContainsAll(keywords));

答案 2 :(得分:0)

sentences.Where(s => keyWords.All(kw => s.shortname.Contains(kw)));

使用All,仅当序列中的所有元素都满足条件

时才返回true