【发布时间】:2018-03-06 23:43:26
【问题描述】:
我正在尝试将 Linq Query 示例翻译成 Lambda,但在翻译 Let 子句时遇到问题。
var numbers = from n in arrayOfNumbers
orderby n
let evenOrOdd = (n % 2 == 0) ? "Even" : "Odd"
group n by evenOrOdd into nums
orderby nums.Count()
select nums;
此示例按预期工作:
var numbers = arrayOfNumbers.OrderBy(n => n)
.GroupBy(n => (n % 2 == 0) ? "Even" : "Odd")
.OrderBy(k => k.Count());
查询和上面的例子都可以通过以下方式打印:
foreach (var item in numbers)
{
Console.WriteLine($"{item.Key}");
foreach (var i in item)
{
Console.WriteLine($" {i}");
}
}
但我想让它更具可读性并以某种方式提取条件,所以我尝试了这个(从这篇帖子 LINQ Let operator with lambda syntax 得到这个想法)但是它
var numbers = arrayOfNumbers.OrderBy(n => n)
.Select(evenOrOdd => new
{
Number = evenOrOdd,
Key = (evenOrOdd % 2 == 0) ? "Even" : "Odd"
})
.GroupBy(n => n.Key)
.OrderBy(k => k.Count());
现在打印有点变了,我需要具体说一下我要打印数字。
foreach (var item in numbers)
{
Console.WriteLine($"{item.Key}");
foreach (var i in item)
{
Console.WriteLine($" {i.Number}");
}
}
将此查询转换为 lambda 语法的正确方法是什么?以某种方式“提取”条件?
【问题讨论】:
-
仅供参考,这是查询语法,您想将其转换为方法语法。