我有两个对象列表,我想比较特定的属性。如果每个列表中的记录对于指定的属性具有相同的值,我希望查询返回true。
我目前正在使用嵌套的foreach循环执行此操作,但我想使用单个LINQ执行此操作。
bool doesEachListContainSameFullName = false;
foreach (FullName name in NameList)
{
foreach (FullName anotherName in AnotherNameList)
{
if (name.First == anotherName.First && name.Last == anotherName.Last)
{
doesEachListContainSameFullName = true;
break;
};
}
if (doesEachListContainSameFullName)
break;
}
我应该补充一点,每个列表中的字段彼此不相等,因此不能直接比较这两个字段。
答案 0 :(得分:5)
您可以使用Any
方法
return NameList.Any(x => otherList.Any(y => x.First == y.First &&
x.Last == y.Last));
答案 1 :(得分:2)
[在理解了要求后编辑了我的答案]
bool doesEachListContainSameFullName =
NameList.Intersect(AnotherNameList, new FullNameEqualityComparer()).Any();
FullNameEqualityComparer
是一个简单的类,如下所示:
class FullNameEqualityComparer : IEqualityComparer<FullName>
{
public bool Equals(FullName x, FullName y)
{
return (x.First == y.First && x.Last == y.Last);
}
public int GetHashCode(FullName obj)
{
return obj.First.GetHashCode() ^ obj.Last.GetHashCode();
}
}