Jef*_*tes 17 c# linq distinct keyword
注意:在您阅读或提供答案之前,我知道Enumerable.Distinct
,我问的是该方法的特定语言支持,而不是方法本身.
我一直想知道为什么distinct
C#LINQ关键字集中没有关键字,所以我可以写:
var items = distinct from x in y
select x;
Run Code Online (Sandbox Code Playgroud)
要么
var items = from x in y
select distinct x;
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么不包括它或为什么包含它是一个坏主意?对我来说,我只需要将查询包装到调用中Distinct()
,这感觉很麻烦; 一个distinct
关键字会感觉更自然.
注意:我知道Distinct
如果需要,该方法会覆盖提供比较器,但使用默认比较器的关键字会很棒.我甚至可以想象一个distinct by
关键字组合,以便可以为查询内联提供比较运算符.
Dar*_*rio 14
在VB中,确实存在.
Dim l = From x In {1, 2, 3, 2, 4, 2} Distinct Select x
Run Code Online (Sandbox Code Playgroud)
我不怀疑distinct
C#已经有了一些积极的决定,它还没有得到实施.
Don*_*nut 10
Charlie Calvert有一篇博客文章("使用Distinct and Avoiding Lambdas")讨论这个问题.从帖子的顶部:
- 大多数查询运算符,例如
Select()
,Where()
并将GroupBy()
称为lambda的东西作为参数.- Lambdas很难写.
- 查询表达式的创建在很大程度上允许开发人员使用LINQ而无需学习与lambdas相关的复杂语法.
- 一些查询运算符(例如
Distinct()
,不)将lambdas作为参数.结果,他们很容易打电话.- 因此,不为诸如
Distinct()
不使用lambdas的运算符创建查询表达式.
而且,从帖子的更下方:
查询运算符是方法调用.换句话说,也有叫LINQ API的方法
Select()
,Group()
,Distinct()
等我们,因为他们把lambda表达式作为参数通常不直接调用这些方法,很多人发现,lambda表达式是很难理解的.为了帮助开发人员避免编写lambda的复杂任务,该团队发明了查询表达式,这是一种位于lambdas之上的"语法糖".
TL; DR:distinct
为了简单起见,没有关键字,因为distinct
不采用lambda表达式.
Reword: distinct
是一个set运算符... set运算符不接受lambdas作为参数.c#团队决定为你提供一些方法,这些方法可以使用lambdas,例如Select()
和Group()
,因为他们觉得lambdas可能会让刚开始的人感到困惑. .Distinct()
不接受lambda,所以当你直接调用它时就很清楚了.
关于这个主题的一个很好的阅读:http:
//blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx