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

C#中如何比较两个对象列表多属性并返回符合条件的匹配项?

问题分析与解决方案

原代码错误原因

你的代码逻辑完全偏离需求,存在两处核心错误:

  • list2.Where(y => y.Name).FirstOrDefault():此代码是筛选Name属性非空/非空白的MyObject实例,取第一个后直接和x.Name(字符串类型)比较,不仅类型不匹配(编译器应提示错误),也没有实现"找同Name对象"的逻辑。
  • list2.Where(y => y.Value).FirstOrDefault():此代码是筛选Value属性非0的MyObject实例,取第一个后和x.Value(整数类型)比较,同样类型错误,且未对应"和同Name对象比Value"的需求。
    这种错误逻辑只会偶然匹配到第一个符合错误条件的对象,自然无法返回所有预期结果。

正确解决方案

方案一:使用Where + Any(简洁直观)

通过Any检查list2中是否存在同Name且Value更小的对象,筛选出list1中满足条件的所有元素:

var results = list1.Where(x => list2.Any(y => y.Name == x.Name && x.Value > y.Value)).ToList();

方案二:使用Join + 去重(性能更优,适合大数据量)

先按Name关联两个列表,再筛选Value符合条件的项,最后去重避免list2中有多个同Name对象时重复返回list1的同一元素:

var results = list1.Join(
        list2,
        x => x.Name,       // list1的关联键:Name
        y => y.Name,       // list2的关联键:Name
        (x, y) => new { List1Obj = x, List2Obj = y }
    )
    .Where(pair => pair.List1Obj.Value > pair.List2Obj.Value)
    .Select(pair => pair.List1Obj)
    .Distinct()
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:31:02