如何组合两个列表<;类>;其中一个变量中没有重复项
本文关键字:变量 一个 何组合 列表 两个 组合 lt gt | 更新日期: 2023-09-27 17:59:37
我有两个列表:
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"
我们看到,标题项已使用列表2中的项替换。
可以肯定的是,获得这样一个结果的最佳方式将是使用LINQ。有人知道怎么做吗?
由于您从第一个列表中省略了ID = 4, Title = "d"
,我假设您希望从list1+list2中获取所有项目,如果两个列表中都存在ID,则从第二个列表中获取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();
组合列表,在id上分组,如果然后从组中选择最后一个项目(如果有多个匹配项,它将是list2中的项目)。
var q = list1.Concat(list2).GroupBy(x => x.Id).Select(x => x.Last());