我在网上看到这一点,但是我很好奇是否有更简单的方法在lambda中写这个?
var x = from c in db.Client
from p in db.Prospects
from ct in db.Countys
select new ViewModelExcelReport
{
client = c.ClientName,
cntyCounty = ct.County,
sctSection = p.Section
};
我想看到一个不使用连接的lambda表达式,好像我几乎可以肯定我已经看到一个没有连接的表达式,但是如果这不可能包括我想看到一个,谢谢
答案 0 :(得分:5)
基本上多个from
条款会提供SelectMany
次来电。所以你的代码是这样的:
var x = db.Client
.SelectMany(c => db.Prospects, (c, p) => new { c, p })
.SelectMany(z => db.Countys, (z, ct) => new { z, ct })
.Select(zz => new ViewModelExcelReport
{
client = zz.z.c.ClientName,
cntyCounty = zz.ct.County,
sctSection = zz.z.p.Section
});
注意这比查询表达式更加冗长 - 编译器负责通过透明标识符跟踪所有范围变量。你为什么要以lambda形式想要这个?你认为什么是好处?查询表达式将被翻译成完全相同的代码,因此您应该使用更清楚的一个 - 在这种情况下看起来像查询表达式,IMO。
顺便说一句,我强烈建议您将属性名称(ViewModelExcelReport
)更改为更惯用的名称(如果可能的话)。