给定一些重复的单词序列,例如:
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/