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(customerOne);
customers.Add(customerTwo);
customers.Add(customerThree);
customers.Add(customerFour);
customers.Add(customerFive);
对于具有相同姓氏的所有客户,哪些LINQ查询会返回可枚举的内容?
结果应该包括一个例子:John Doe,Jane Doe,Super Man和Bat Man
答案 0 :(得分:33)
customers.GroupBy(c => c.LastName).Where(g => g.Skip(1).Any()).SelectMany(c => c)
或使用LINQ语法:
var q = from c in customers
group c by c.LastName into g
where g.Skip(1).Any()
from c in g
select c;
答案 1 :(得分:13)
var result = from c in customers
join c2 in customers on c.LastName equals c2.LastName
where c != c2
select c;
答案 2 :(得分:7)
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);
}
}
输出:
Doe
John
Jane
Man
Super
Bat
您可以使用
将生成的组序列展平为一个序列var list = groups.SelectMany(g => g);