c# - C#/LINQ 中的嵌套 .SelectMany 语句

标签 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 的东西,所以无法访问 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/

相关文章:

c# - 使用 IEnumerator 和使用数组作为属性之间的区别

asp.net-mvc - Kendo MVC 动态 Linq 扩展

mysql - SELECT WHERE IN(子查询)慢

mysql - SQL where 子句中的否定

javascript - angularjs - 如何使用 html 选择

c# - 控制台应用程序等待 keyup

c# - 如何使用 Ioc Unity 注入(inject)依赖属性

c# - 使用 Linq 检索基于 C# 的列表 <> 项的索引

c# - 将类的属性设置为函数的参数

c# - MysqlConnection 字符串 : get Date in (yyyy-mm-dd hh:mm:ss)