如何组合两个列表<;类>;其中一个变量中没有重复项

本文关键字:变量 一个 何组合 列表 两个 组合 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());