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

如何使用Linq按指定属性匹配嵌套子列表与第三方列表

C# 嵌套子列表双属性匹配LINQ实现方案

核心思路

你原有写法直接调用Equals是引用类型比较,不会对比内部属性值,因此无法得到预期结果。要实现CurrentClothes列表和Human的clothings子列表的Garment、Color双属性完全匹配,需要同时满足两个条件:

  • 两个列表的元素数量完全一致
  • 两个列表的Garment+Color属性组合完全重合,不存在多余或缺失的组合

代码实现

方案1:不要求元素顺序匹配(推荐,符合衣物集合的常规使用场景)

// 先将待匹配的目标集合转属性组合哈希集,提升比对效率
var matchSet = currentclothes
    .Select(c => new { c.Garment, c.Color })
    .ToHashSet();

// 查询匹配的Human集合
List<Human> matchedHumans = humans
    .Where(h => 
        // 先校验数量一致,快速过滤不符合的对象
        h.clothings.Count == currentclothes.Count
        // 校验所有衣物的属性组合都在目标集合中
        && h.clothings.Select(c => new { c.Garment, c.Color }).All(matchSet.Contains)
    )
    .ToList();

你的示例中该查询会正确返回Paula对应的Human对象。

方案2:要求元素顺序严格匹配

如果业务要求两个列表的元素顺序也必须完全对应,可以使用SequenceEqual方法:

List<Human> matchedHumans = humans
    .Where(h => 
        h.clothings.Select(c => new { c.Garment, c.Color })
        .SequenceEqual(currentclothes.Select(c => new { c.Garment, c.Color }))
    )
    .ToList();

内容的提问来源于stack exchange,提问作者T0bi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:36:02