繁体   English   中英

将两个对象列表相交于一个公共属性,然后比较一个不同的属性

[英]Intersect two object lists on a common property and then compare a different property

我有两个清单

List<objA> List1 List<objA> List2

我想在ID字段上比较这两个列表,一旦找到匹配项,我想在这两个列表中比较另一个字段Distace ,并以较低的值获取对象。

使用Linq并不是没有得到我想要的结果,至少是问题的第一部分。

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

这是您可以使用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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM