是否可以简化此Linq查询语法?

时间:2013-04-14 09:16:09

标签: c# linq

给出一些重复的单词序列,例如:

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的答案。

2 个答案:

答案 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#)

如果您想简单地查询语法,那么我认为您不能过多地修改它,因为它与您的方法语法等效。