按属性联合两个列表

Cie*_*eja 2 .net c# linq ienumerable list

我想合并两个不重复的列表。它应该仅由一个属性来区分。

我有一堂课:

public class Test
{
    public int Id { get; set; }
    public string Prop { get; set; }
    public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有两个列表,我想按类型合并它们而不重复。因此,首先我想从列表 1 中获取所有内容,然后当列表 1 中不存在 Type 时从列表 2 中获取所有内容。

我试过联合。

M.S*_*.S. 5

您必须使用 IEqualityComparer。请参阅: https: //msdn.microsoft.com/en-us/library/ms132151%28v=vs.110%29.aspx ?f=255&MSPPError=-2147217396

class Compare : IEqualityComparer<Test>
{
    public bool Equals(Test x, Test y)
    {
        return x.Id == y.Id;
    }
    public int GetHashCode(Test codeh)
    {
        return codeh.Id.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用

var union = list1.Union(list2).Distinct(new Compare()).ToList(); 
Run Code Online (Sandbox Code Playgroud)


小智 5

使用 .NET 6 或更高版本,您可以使用 UnionBy() 方法,该方法将合并 2 个列表,按属性排除重复项:

var mergedLists = firstList.UnionBy(secondList, u => u.property).ToList();
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:微软文档