LINQ:一个列表中的值与另一个列表中的值相等

时间:2015-02-10 23:19:28

标签: c# linq

我有两个对象列表,我想比较特定的属性。如果每个列表中的记录对于指定的属性具有相同的值,我希望查询返回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;
}

我应该补充一点,每个列表中的字段彼此不相等,因此不能直接比较这两个字段。

2 个答案:

答案 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();
    }
}