c#如何在 linq 中,不区分大小写的方式比较字符串,当他们的对象的属性

标签: Linq C#
发布时间: 2017/2/28 23:06:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个相同的对象的列表,我想要找到并集和交集的这些基于不区分大小写的比较的对象的属性的列表。

为简单起见,我们姑且称之为 Person ,和我想要作为筛选依据 Person.Name 属性。

推荐的办法做到这一点是什么?我希望能将代码保存在一个单一的 Linq 行。

目前我做下列操作︰

public class Person { public string Name { get; set; } }

-

var people =
    firstListOfPeople.Where(
        p1 => p1.Name != null &&
            secondListOfPeople
                .Where(p2 => p2.Name != null)
                .Select(p2 => p2.Name.ToUpper())
                .Contains(p1.Name.ToUpper()));

解决方法 1:

我认为 @BradleyDotNET 有正确的答案,但既然我已经有大部分完整的示例,我以为我将它张贴,它可以帮助在路上的人的情况下︰

void Main()
{
    var firstListOfPeople = new[]
    {
        new Person { Name = "Rufus" },
        new Person { Name = "Bob" },
        new Person { Name = "steve" },
    };

    var secondListOfPeople = new[]
    {
        new Person { Name = "john" },
        new Person { Name = "Bob" },
        new Person { Name = "rufus" },
    };

    var people = firstListOfPeople.Intersect(secondListOfPeople, new PersonNameComparer());

    people.Dump(); // displays the result if you are using LINQPad
}

public class Person
{
    public string Name { get; set; }
}

public class PersonNameComparer: EqualityComparer<Person>
{

    public override bool Equals(Person p1, Person p2)
    {
        return p1.Name.Equals(p2.Name, StringComparison.OrdinalIgnoreCase);
    }

    public override int GetHashCode(Person p)
    {
        return p.Name.ToLower().GetHashCode();
    }
}
官方微信
官方QQ群
31647020