选择distinct而不创建IEqualityComparer

时间:2012-11-12 18:30:38

标签: c# linq

我想使用Linq 选择一组不同的元素,而不使用创建IEqualityComparer类。我无法弄清楚如何创建一个lambda表达式,该表达式被评估为与Distinct()一起使用的IEqualityComparer。因此,我使用分组来选择具有不同名称的客户:

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;
  }
}

但这似乎很蠢。

我要么将Distinct与lambda表达式

一起使用
var distinctCustomers = customers.Distinct ( <lambda here ?> )

或比上面列出的更清洁的Linq表达。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果您不想重新实现DistinctBy(或使用the one in MoreLINQ之类的内容),可以通过GroupBySelect来实现此目的。选择每个组中的第一个元素:

var distinctCustomers = customers.GroupBy(cust => cust.Name).Select(g => g.First());

答案 1 :(得分:1)

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

IEnumerable<Customer> distinctCustomers = customers.DistinctBy(c => c.Name);