在C#/ LINQ

时间:2017-05-15 12:17:58

标签: c# linq select

我有以下代码,完全正常:

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,但也无法让它们工作。

谢谢!

2 个答案:

答案 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
    },