我有两个清单
List<objA> List1 List<objA> List2
我想在 ID 字段上比较这两个列表,一旦找到匹配,我想比较这两个列表中的另一个字段 Distace 并 grab 具有较低值的对象 .
ID
Distace
使用Linq并不是给出我想要的结果,至少是问题的第一部分 .
var test = List1.Select(x => x.ID) .Intersect(List2.Select(y => y.ID));
这是使用Linq实现这一目标的一种方法 . 首先,将两个列表与 Union 一起加入 . 然后,按 Id 字段对它们进行分组 . 最后,在分组中按 Distance 对这些子列表进行排序,并使用每个子列表中的第一个来获取具有最小可用距离的 Id 的对象列表 .
Union
Id
Distance
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());
1 回答
这是使用Linq实现这一目标的一种方法 . 首先,将两个列表与
Union
一起加入 . 然后,按Id
字段对它们进行分组 . 最后,在分组中按Distance
对这些子列表进行排序,并使用每个子列表中的第一个来获取具有最小可用距离的Id
的对象列表 .