如何将这个linq查询转换为lambda表达式?

3

我有这个查询:

return (from r in this.Requests where r.Status == "Authorised" from i in r.Items select i).Sum(i => i.Value);

我尝试将其转换为lambda表达式,因为我现在更喜欢这种方式,所以我做了以下操作: var sum = Requests.Where(x => x.Status == "Authorised").Select(x => x.Items).Sum(x => x.Value);
但是这里没有得到Value项,有任何想法吗?

无法看到您转换后代码的最后一部分 - 您能更新您的问题吗? - Matthew Watson
可能是因为你使用了var,它会影响智能感知。 - The_Cthulhu_Kid
@The_Cthulhu_Kid: var 绝对不应该与 Intellisense 搞混,因为它仍然是静态类型的。 - Jon Skeet
@The_Cthulhu_Kid:你需要给出一个具体的例子才能真正有用。 - Jon Skeet
@JonSkeet 我曾经考虑过这个问题,是我的同事让我意识到的。例如,当使用foreach与var而不是Umbraco的DynamicNode(其中一部分)时,您无法访问变量的属性,必须是显式的DynamicNode。 - The_Cthulhu_Kid
显示剩余5条评论
1个回答

5

你需要使用SelectMany而不是Select。你的查询基本上等同于:

return this.Requests
           .Where(r => r.Status == "Authorised")
           .SelectMany(r => r.Items)
           .Sum(i => i.Value);

请注意,您原始的查询如果也以多行方式显示将更加清晰易懂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接