我有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的列表?
答案 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);
要在班级中实现平等,您只需覆盖Equals
和GetHashCode
:
public override bool Equals(object obj)
{
var compareTo = obj as Emp;
return Id.Equals(CompareTo.Id);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
这样做的好处是,无论您需要比较两个emp
个实例,它都会利用此实现。