[英]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.