将不同的ID复制到列表中

时间:2014-05-04 11:28:24

标签: c# list

我有4个列表,如下所示:

List <Emp> l1 = new List<Emp>();
List <Emp> l2 = new List<Emp>();
List <Emp> l3 = new List<Emp>();
List <Emp> l4 = new List<Emp>();

Emp有一个名为id的属性,如何获取所有四个列表中所有不同ID的列表?

3 个答案:

答案 0 :(得分:5)

对于DistinctBy,您需要MoreLinq

 IEnumrable<Emp> uniqueEmps = l1.Concat(l2).Concat(l3).Concat(l4)
                                .DistinctBy(e => e.id);

只是Id:

 IEnumrable<int> uniqueIds = l1.Concat(l2).Concat(l3).Concat(l4)
                               .Select(e => e.id).Distinct();

答案 1 :(得分:5)

  

如何获取所有四个列表中所有不同ID的列表?

如果您要查找ID列表(而不是具有这些ID的Emp个对象),您可以使用简单的查询来执行此操作:

var ids = l1.Concat(l2).Concat(l3).Concat(l4).Select(e => e.Id).Distinct();

答案 2 :(得分:1)

如果您的emp类实现了相等比较,那么您可以将列表组合在一起:

IEnumrable<int> uniqueIds = l1.Union(l2).Union(l3).Union(l4).Select(e => e.id);

要在班级中实现平等,您只需覆盖EqualsGetHashCode

public override bool Equals(object obj)
{
    var compareTo = obj as Emp;
    return Id.Equals(CompareTo.Id);
}

public override int GetHashCode()
{
    return Id.GetHashCode();
}

这样做的好处是,无论您需要比较两个emp个实例,它都会利用此实现。