如何使用LINQ查找特定属性的副本?

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 customers = new List(); customers.Add(customerOne); customers.Add(customerTwo); customers.Add(customerThree); customers.Add(customerFour); customers.Add(customerFive); 

LINQ查询将为具有相同姓氏的所有客户返回可枚举的内容?

结果应该包括一个例子:John Doe,Jane Doe,Super Man和Bat Man

  var result = from c in customers join c2 in customers on c.LastName equals c2.LastName where c != c2 select c; 
  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; 
 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);