我想使用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表达。
有什么想法吗?
答案 0 :(得分:5)
如果您不想重新实现DistinctBy
(或使用the one in MoreLINQ之类的内容),可以通过GroupBy
和Select
来实现此目的。选择每个组中的第一个元素:
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);