我有两个清单:
public class ListTemplate
{
public decimal Id { get; set; }
public string Title { get; set; }
}
public List<ListTemplate> List1 = new List<ListTemplate>();
public List<ListTemplate> List2 = new List<ListTemplate>();
清单1:
ID = 1, Title = "a"
ID = 2, Title = "b"
ID = 3, Title = "c"
ID = 4, Title = "d"
清单2:
ID = 3, Title = "c"
ID = 4, Title = "ab"
ID = 5, Title = "a"
ID = 6, Title = "a"
我想得到结果:
ID = 1, Title = "a"
ID = 2, Title = "b"
ID = 3, Title = "c"
ID = 4, Title = "ab"
ID = 5, Title = "a"
ID = 6, Title = "a"
我们看到,使用list2中的项目替换了标题项目。
使用LINQ时,最好的方法是获得这样的结果。有人知道这样做的好方法吗?
答案 0 :(得分:1)
由于您从第一个列表中省略了ID = 4, Title = "d"
,我假设您要从list1 + list2中获取所有项目,如果两个列表中都存在ID,请从第二个列表中取一个。
然后使用Except
+ Concat
的这种方法有效:
var idOnlyList1 = List1.Select(x => x.Id).Except(List2.Select(x => x.Id));
var templates1 = from id in idOnlyList1 join lt1 in List1 on id equals lt1.Id select lt1;
List<ListTemplate> result = templates1.Concat(List2).ToList();
答案 1 :(得分:1)
合并列表,ID上的组,然后选择组中的最后一项(如果多个匹配,它将是list2中的项目)。
var q = list1.Concat(list2).GroupBy(x => x.Id).Select(x => x.Last());