3 回答
TA贡献1825条经验 获得超4个赞
如果您需要按Id属性执行此检查,那么GroupJoin这就是您要查找的内容。
它允许您按选择器对两个不同的集合进行分组,然后加入它们:
bool ComplexCollectionValuesAreEqual(List<ComplexItem1> list1, List<ComplexItem2> list2)
{
try
{
var grouped = list1.GroupJoin(list2, x => x.Id, x => x.Id,
(outer, inners) => outer.Value == inners.Single().Value);
return grouped.All(x => x);
}
catch (InvalidOperationException) // for .Single() fail case
{
return false;
}
}
您可以在 的最后一个 lambda 中应用其他比较逻辑GroupJoin,例如outer.Value <= inners.Single().Value检查 中的所有值item1是否等于或小于 中的相应值item2。
请注意,在此实现中,如果list2集合中没有具有此类 ID 的对象,它将返回 false 。如果你总是排除它存在,你可能想要抛出异常。
TA贡献1966条经验 获得超4个赞
bool isTrue = list1.Select((z, i) => z.Id != list2[i].Id || z.Value != list2[i].Value).Count() == 0;
如果集合未排序
bool isTrue = list1.Where(x => list2.First(y => y.Id == x.Id).Value != x.Value ).Count() == 0;
如果项目不应有重复项且计数应相等
bool isTrue = list1.Where(x => list2.First(y => y.Id == x.Id).Value == x.Value).Count() == list2.Count && list2.Count == list1.Count;
- 3 回答
- 0 关注
- 190 浏览
添加回答
举报