我有两个列表
List<objA> List1
List<objA> List2
我想比较ID
字段上的这两个列表,一旦找到匹配项,我想比较这两个列表中的另一个字段Distace
,并获取值较低的对象。
使用Linq并不是没有给出我想要的结果,至少是问题的第一部分。
var test = List1.Select(x => x.ID)
.Intersect(List2.Select(y => y.ID));
答案 0 :(得分: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());