我基本上有两个字符串列表,并希望获取包含第二个列表中每个单词的第一个列表的元素。
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)));
答案 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