你可以在不使用join语句的情况下将这个Linq语句转换为Lambda吗?

时间:2013-11-26 17:32:24

标签: linq lambda

我在网上看到这一点,但是我很好奇是否有更简单的方法在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表达式,好像我几乎可以肯定我已经看到一个没有连接的表达式,但是如果这不可能包括我想看到一个,谢谢

1 个答案:

答案 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)更改为更惯用的名称(如果可能的话)。