我有下面的代码,它工作得很好:
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 的东西,所以无法访问 Account。
(您现在可能已经知道,一个“fa”有一个帐户和多个流,我想将它们变成“流”,它们也都分配有帐户。)
如何仅使用“.”来解决这个问题?声明?我也研究了不同的 GroupBys,但也无法使它们工作。
谢谢!
最佳答案
安overload SelectMany
使用一个额外的参数(结果选择器),您可以在其中定义返回的对象。在此结果选择器中,您可以访问源项和子项:
[....]
.SelectMany(fa => fa.Flows, (fa,f)=> new Flow(f.Id, f.DealingDate, f.NetCashUsd, fa.Account));
关于c# - C#/LINQ 中的嵌套 .SelectMany 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43979355/