我有以下代码,完全正常:
return from fa in [...]
where fa.Flows.Any()
from f in fa.Flows
select new Flow(f.Id, f.DealingDate, f.NetCashUsd, fa.Account);
正如您所看到的,我需要在第二个选择中更深入的帐户。
但是我需要使用“.Selects”代替,而这(相当于我认为)不起作用:
return [...]
.Where(fa => fa.Flows.Any())
.SelectMany(fa => fa.Flows)
.Select(f => new Flow(f.Id, f.DealingDate, f.NetCashUsd, fa.Account));
这里的问题显而易见,第二个.Select不再“知道”fa的东西,所以无法进入账户。
(正如您现在可以看到的那样,“fa”有一个帐户和多个流量,我想将它们变成“流量”,所有流量都分配给它们。)
如何仅使用“。”解决此问题。声明?我也调查了不同的GroupBys,但也无法让它们工作。
谢谢!
答案 0 :(得分:3)
等效的是创建一个中间匿名类型来保存两个对象。
return [...]
.SelectMany(fa => fa.Flows.Select(f => new { f, fa}))
.Select(x => new Flow(x.f.Id, x.f.DealingDate, x.f.NetCashUsd, x.fa.Account));
此外,您不需要Where
,因为空Flows
只会导致没有选定的项目。
答案 1 :(得分:2)
SelectMany
[....]
.SelectMany(fa => fa.Flows, (fa,f)=> new Flow(f.Id, f.DealingDate, f.NetCashUsd, fa.Account));
使用额外参数(结果选择器),您可以在其中定义返回的对象。在此结果选择器中,您可以访问源项和子项:
title: {
text: 'When chart having large text title When chart having large text title When chart having large text title',
useHTML: true,
widthAdjust: -200
},