You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为列表每个元素执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 09:15:11