给出一些重复的单词序列,例如:
var words = "one two three two four five six four seven four eight".Split(' ');
你可以找到像这样的重复项你可以将这样的词分组:
var g1 = words.GroupBy(w => w);
我试图将其重写为Linq Query sytnax,只是为了看看它是什么样的(我知道在实际代码中你会像上面一行那样离开它!)。
Linq我想到的看起来比它应该复杂得多,我想。怎么简化?它真的与上面的行相同吗?
var g2 = from w in words group w by w into g select g;
(我想我正在进行一场星期日大脑褪色......;)
[编辑]我对此惊叹的来源是this question from earlier的答案。
答案 0 :(得分:5)
您的查询不会返回重复项,它会返回不同的项目,因此您可以轻松使用Distinct()
扩展方法。
var dist = words.Distinct();
Distinct()
在语法查询中没有等效内容。
如果您真的在寻找重复项,则必须将查询更改为:
var g1 = words.GroupBy(w => w).Where(g => g.Count() > 1).Select(g => g.Key);
并在语法查询中
var g1 = from w in words
group w by w into g
where g.Count() > 1
select g.Key;
但是,第二个将由编译器翻译成第一个。
我没有看到使用语法查询获得此更简单的方法。
答案 1 :(得分:2)
以上都是LINQ版本。一个是方法表达式,另一个是Query Expression。他们之间没有区别。
您应该看到:Query Syntax and Method Syntax in LINQ (C#)
如果您想简单地查询语法,那么我认为您不能过多地修改它,因为它与您的方法语法等效。