给出一些重复的单词序列,例如:
var words = "one two three two four five six four seven four eight".Split(' ');
Run Code Online (Sandbox Code Playgroud)
您可以找到这样的重复项您可以将这样的单词分组:
var g1 = words.GroupBy(w => w);
Run Code Online (Sandbox Code Playgroud)
我试图将其重写为Linq Query sytnax,只是为了看看它是什么样的(我知道在实际代码中你会像上面的那行一样离开它!).
我认为Linq I看起来比它应该复杂得多.怎么简化?它和上面的线真的一样吗?
var g2 = from w in words group w by w into g select g;
Run Code Online (Sandbox Code Playgroud)
(我想我正在进行一次星期日大脑褪色...;)
[编辑]我对这个惊叹的来源是从前面这个问题的答案.
您的查询不返回重复项,它返回不同的项,因此您可以轻松使用 Distinct()扩展方法.
var dist = words.Distinct();
Run Code Online (Sandbox Code Playgroud)
Distinct() 在语法查询中没有等价物.
如果您真的在寻找重复项,则必须将查询更改为:
var g1 = words.GroupBy(w => w).Where(g => g.Count() > 1).Select(g => g.Key);
Run Code Online (Sandbox Code Playgroud)
并在语法查询中
var g1 = from w in words
group w by w into g
where g.Count() > 1
select g.Key;
Run Code Online (Sandbox Code Playgroud)
但是,第二个将由编译器转换为第一个.
我没有看到使用语法查询获得此更简单的方法.