我有2个名单:
的List1:
ID 1 2 3
列表2:
ID名称
杰森,1 1吉姆 2迈克 3菲尔我喜欢加入这两个,但只从list2获取给定ID的第一条记录: 最终结果将是
ID名称 1杰森 2迈克 3菲尔
我尝试了以下但未成功:
var lst = (from lst1 in list1
join lst2 in list2
on lst1.ID equals lst2.ID).ToList().First();
答案 0 :(得分:7)
您可以使用101 LINQ Samples调用"Cross Join with Group Join"的内容获得此结果。将其与First()
结合使用即可获得该组中的一个项目。
var lst = (
from lst1 in list1
join lst2 in list2 on lst1.ID equals lst2.ID into lstGroup
select lstGroup.First()
);
答案 1 :(得分:2)
这是一种方法:
var lst = list1
// Select distinct IDs that are in both lists:
.Where(lst1 => list2
.Select(lst2 => lst2.ID)
.Contains(lst1.ID))
.Distinct()
// Select items in list 2 matching the IDs above:
.Select(lst1 => list2
.Where(lst2 => lst2.ID == lst1.ID)
.First());
答案 2 :(得分:1)
首先尝试按ID分组list2,然后从每个组中选择第一项。之后,进行连接并选择您想要的内容。
var uniqueIDList2 = list2.GroupBy(p => p.ID)
.Select(p => p.First());
var result = from lst1 in list1
join lst2 in uniqueIDList2 on lst1.ID equals lst2.ID
select new { lst1.ID, lst2.Name };
答案 3 :(得分:0)
另一种方式:
var query = from lst1 in list1
let first = list2.FirstOrDefault(f => f.Id == lst1.Id)
where first != null
select first;
或者,如果您想了解list2中无法找到的项目:
var query = from lst1 in list1
let first = list2.FirstOrDefault(f => f.Id == lst1.Id)
select first ?? new { Id = 0, Name = "Not Found" };