开发者

How do you use LINQ to find the duplicate of a specific property?

Customer customerOne = new Customer("John", "Doe");
Customer customerTwo = new Customer("Super", "Man");
Customer customerThree = new Customer("Crazy", "Guy");
Customer customerFour = new Customer("Jane", "Doe");
Customer customerFive = new Customer("Bat", "Man");

List<Customer> customers = new List<Customer>();
customers.Add(cus开发者_C百科tomerOne);
customers.Add(customerTwo);
customers.Add(customerThree);
customers.Add(customerFour);
customers.Add(customerFive);

What LINQ query would return an enumerable for all customers with the same last name?

Results should include one instance of: John Doe, Jane Doe, Super Man, and Bat Man


 customers.GroupBy(c => c.LastName).Where(g => g.Skip(1).Any()).SelectMany(c => c)

or with LINQ syntax:

        var q = from c in customers
                group c by c.LastName into g
                where g.Skip(1).Any()
                from c in g
                select c;


    var result = from c in customers
                 join c2 in customers on c.LastName equals c2.LastName
                 where c != c2
                 select c;


var groups = customers.GroupBy(c => c.LastName).Where(g => g.Skip(1).Any());
foreach(var group in groups) {
    Console.WriteLine(group.Key);
    foreach(var customer in group) {
        Console.WriteLine("\t" + customer.FirstName);
    }
}

Output:

Doe
        John
        Jane
Man
        Super
        Bat

You can flatten the resulting sequence of groups into one sequence with

var list = groups.SelectMany(g => g);


If you just want to find if there is a duplicate you can use this trick.

var result = customers.GroupBy(c => c.Id).Count() != customers.Count();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜