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

标签 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 的回答。 .

最佳答案

您的查询不会返回重复项,它会返回不同的项目,因此您可以轻松地使用 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;

但是,第二个会被编译器翻译成第一个。

我没有看到任何更简单的方法来使用语法查询来获得它。

关于c# - 是否可以简化此 Linq 查询语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997476/

相关文章:

c# - ObserveOn with Scheduler.NewThread 不这么观察,如果observer的OnNext被阻塞继续

c# - 如何使用c#读取excel中的特定列并获取该列中不同单词的出现次数

c# - 执行一般 LINQ 查询时出现 PlatformNotSupportedException

c# - 获取不以linq中的字母字符开头的记录

linq - Reflector生成Lambda表达式,如何取回实际的Linq查询?

c# - Batchify 长 Linq 操作?

c# - 空构造函数在 C# 中提供了哪些好处?

c# - 如何在此 C# 程序中获取要打印的列名?

c# - 这是接口(interface)的错误使用吗?

c# - 文件无法访问,因为它被另一个进程异常使用