我的代码
query1 = select value1, value2 from dbo.animal where animalname="tiger";
query2 = select value1, value2 from dbo.animal where animalname="lion";
List<Animal> list1 = db.ExecuteStoreQuery<Animal>(query1).ToList();
List<Animal> list2 = db.ExecuteStoreQuery<Animal>(query2).ToList();
// list1.Count = 1 list1[0].value1 = "a" list1[0].value2 = "b"
// list2.Count = 1 list2[0].value1 = "a" list2[0].value2 = "b"
// Now I would like to compare list1 and list2 to see if they are equal
var list3 = list1.Except(list2);
//At this point list3 is containing both list1 and list2 and using var made it
//GenericList not the same type of list as List1 and List2
我试过List list3 = list1.Except(list2)但是我得到了编译错误。
所以问题是如何确定list1是否等于list2? 我希望list3是list1和list2之间的差异,因此如果列表相等,list3.count()应为0。
关于我的数据的好处是我相信来自query1和query的数据应该按顺序排列并且每个只产生1条记录。
答案 0 :(得分:1)
首先,检查Except
的结果是否为空无法回答&#34;这两个列表是否相等?&#34;题。它回答了&#34; list2
是否包含list1
的所有元素?&#34;,这是不一样的,因为list2
可能包含其他元素。
关于我的数据的好处是我相信来自query1和query的数据应该按顺序排列并且每个只产生1条记录。
您可以使用SequenceEqual
比较两个相同排序的列表是否相等,如下所示:
bool areIdentical = list1.SequenceEqual(list2);
如果排序不同,您也可以强制它与OrderBy
:
bool areIdentical = list1
.OrderBy(animal=>animal.Id)
.SequenceEqual(list2.OrderBy(animal=>animal.Id));