如何为列表每个元素执行LINQ查询并返回去重的结果集合
解决方案
你可以直接调整LINQ的查询条件,无需循环查询每个分类再合并结果,修改后的代码如下:
public ObservableCollection<Question> GetQuestionsByCategory(List<Category> categories) { // 匹配所有归属任意传入分类的问题 var questions = from q in this.Questions where q.Categories.Any(c => categories.Contains(c)) select q; // 去重处理,已重写Question的Equals和GetHashCode可直接用Distinct var distinctQuestions = questions.Distinct().ToList(); // 若未重写Equals,可通过Question的唯一标识(如Id)去重,示例如下: // var distinctQuestions = questions.GroupBy(q => q.Id).Select(g => g.First()).ToList(); return new ObservableCollection<Question>(distinctQuestions); }
逻辑说明
- 原代码只匹配了传入分类列表的第一个元素,修改后用
Any方法判断只要问题的分类列表中存在任意一个属于传入分类集合的项,就会被查询命中,一次查询即可拿到所有符合条件的结果 - 去重步骤是为了避免同一问题归属多个传入分类时被重复加入结果集,可根据你项目中
Question类的实现选择合适的去重方式
内容的提问来源于stack exchange,提问作者Tanuki
相关产品推荐
相关产品推荐

