LINQ:在2个属性中搜索字符串列表

本文关键字:搜索 字符串 列表 属性 2个 LINQ | 更新日期: 2023-09-27 18:22:49

我在代码的各个部分都有以下内容:

问题模型:

public class QuestionModel {
    public string Question { get; set; }
    public string Answer { get; set; }
}

关键词:

List<string> SearchKeywords

问题:

List<QuestionModel> Questions

我想实现的是从所有问题的列表中,搜索并保留所有具有所有关键字的问题。

我已经走到了这一步,但遇到了一个路障:

var questions = GetAllQuestions(); //returns all questions as a List<QuestionModel>
Questions = questions.All(x => SearchKeywords.All(k => x.Question.Contains(k) || x.Answer.Contains(k)));

然而,这会返回一个bool。

如有任何帮助或指示,我们将不胜感激。

LINQ:在2个属性中搜索字符串列表

您使用了错误的LINQ方法,您需要Where而不是All:

Questions = questions.Where(x => ...);

All告诉集合中的每个项是否都满足一个条件(布尔结果);Where过滤满足条件的元素(过滤后的收集结果)。

根据Questions到底是什么(看起来像一个属性,属于什么类型?),您可能必须用ToListToArray来包装它。

第一个All错误。您需要Where:

Questions = questions.Where(x => SearchKeywords.All(k => x.Question.Contains(k) || x.Answer.Contains(k))).ToList();

此外,由于QuestionsList<QuestionModel>,因此需要ToList