2

我想使用 Linq 从集合中选择一组不同的元素,而不创建 IEqualityComparer 类。我不知道如何创建一个 lambda 表达式,该表达式被评估为 IEqualityComparer 以与Distinct(). 因此,我使用分组来选择具有不同名称的客户:

var distinctCustomers = new List<Customer>();
var groups= customers.GroupBy (cust => cust.Name);
foreach (var g in groups)
{
  foreach (var customer in g)
  {
    distinctCustomers.Add (customer);
    break;
  }
}

但这似乎很恶心。

我要么想使用Distinctlambda 表达式

var distinctCustomers = customers.Distinct ( <lambda here ?> )

或者比上面列出的更干净的 Linq 表达式。

有任何想法吗?

4

2 回答 2

5

如果您不想重新实现 a DistinctBy(或使用类似MoreLINQ 中的那个),您可以通过GroupBy和 a执行此操作Select,您只需选择每个组中的第一个元素:

var distinctCustomers = customers.GroupBy(cust => cust.Name).Select(g => g.First());
于 2012-11-12T18:36:08.843 回答
1

使用Jon Skeet 的MoreLINQ,它有一个 DistinctBy 方法。或者将其实现到您的代码中。

IEnumerable<Customer> distinctCustomers = customers.DistinctBy(c => c.Name);
于 2012-11-12T18:35:27.550 回答