首页 文章

在公共属性上交叉两个对象列表,然后比较不同的属性

提问于
浏览
0

我有两个清单

List<objA> List1 List<objA> List2

我想在 ID 字段上比较这两个列表,一旦找到匹配,我想比较这两个列表中的另一个字段 Distace 并 grab 具有较低值的对象 .

使用Linq并不是给出我想要的结果,至少是问题的第一部分 .

var test = List1.Select(x => x.ID) .Intersect(List2.Select(y => y.ID));

1 回答

  • 0

    这是使用Linq实现这一目标的一种方法 . 首先,将两个列表与 Union 一起加入 . 然后,按 Id 字段对它们进行分组 . 最后,在分组中按 Distance 对这些子列表进行排序,并使用每个子列表中的第一个来获取具有最小可用距离的 Id 的对象列表 .

    var aList = new[]
    {
        new SomeObject() { Id = 1, Distance = 3 },
        new SomeObject() { Id = 2, Distance = 5 }
    };
    
    var bList = new[]
    {
        new SomeObject() { Id = 1, Distance = 2 },
        new SomeObject() { Id = 2, Distance = 6 }
    };
    
    var results = aList
        .Union(bList)
        .GroupBy(a => a.Id, a => a)
        .Select(a => a.OrderBy(b => b.Distance).First());
    

相关问题