【发布时间】:2013-01-09 13:48:48
【问题描述】:
我有两个列表
ListA<Emp> 和 ListB<Emp>
两者都有 1000 条记录。
Emp 是 Employee 类的对象。下面是我的Employee 类
public class Employee
{
int ID = 0;
string Name = String.Empty;
string Dept = String.Empty;
string Address = String.Empty;
int Age = 0;
string Email = String.Empty;
}
我想验证两个列表是否相等。 Emp 对象可以按不同的顺序放置。此外,可能有几个 Emp 对象在两个列表中具有完全相同的信息。我也必须验证这些。
我尝试对列表进行排序并使用SequenceEqual进行比较
Enumerable.SequenceEqual(ListA.OrderBy(s => s), ListB.OrderBy(s => s)
我遇到了错误
At least one object must implement IComparable.
Exception Stack trace is as below
at System.Collections.Comparer.Compare(Object a, Object b)
at System.Collections.Generic.ObjectComparer`1.Compare(T x, T y)
at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2)
at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right)
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Enumerable.SequenceEqual[TSource](IEnumerable`1 first, IEnumerable`1 second, IEqualityComparer`1 comparer)
at System.Linq.Enumerable.SequenceEqual[TSource](IEnumerable`1 first, IEnumerable`1 second)
我该如何实现呢?另外,如果你们能提供给我最快的方法会更好,因为 List 中的对象数量可能会增长到 1000 万。 感谢您的帮助!
编辑:每个员工都必须在两个列表中,顺序无关紧要。但是,如果 ListA 包含 5 次相同的员工对象(这意味着一些重复的条目),而 ListB 包含 4 次员工对象,则 ListA 和 ListB 不相等。
【问题讨论】:
-
等于意味着每个员工都在两个列表中,或者顺序也必须相同(
SequenceEqual建议什么)? -
您是否首先实施了
IEquatable<Employee>? -
您想按什么排序列表?对
Employee对象进行排序本身没有意义。 -
每个员工都会在这两个列表中,顺序无关紧要。但是,如果 ListA 包含 5 次相同的员工对象(这意味着一些重复的条目),而 ListB 包含 4 次员工对象,则 ListA 和 ListB 不相等。
-
如果您需要重复的实例数来匹配,那么我认为您需要先排序。看我的回答。