1

给定一个带有外连接的 LINQ to Entity 查询...

var query = from items in entityDb.TableName
         join requestedBy in entityDb.People on items.RequestedById equals requestedBy.PersonId into requestedByOuter
         from requestedBy in requestedByOuter.DefaultIfEmpty()
         select items;

这种外连接的编译(Lamba 表达式)版本是什么样的?有没有办法在 Visual Studio 调试器中看到这个?

更新
为了澄清,Jon Skeet 在他的书中解释说,查询表达式在进行“真正的编译”之前被“编译器翻译”为普通的 C# 代码。我的问题是,在外连接的情况下,查询表达式如何转换为真正的 C#?而且,我们可以在调试器中或通过其他方式看到这些翻译吗?

4

1 回答 1

1

以下声明:

from u in TblUsers
join c in TblCompanies on u.FkCompanyID equals c.PkCompanyID into g
from x in g.DefaultIfEmpty()
select u

会导致这个lamba表达式(根据优秀的应用程序LINQPad):

TblUsers
   .GroupJoin (
      TblCompanies, 
      u => u.FkCompanyID, 
      c => c.PkCompanyID, 
      (u, g) => 
         new  
         {
            u = u, 
            g = g
         }
   )
   .SelectMany (
      temp0 => temp0.g.DefaultIfEmpty (), 
      (temp0, x) => temp0.u
   )
于 2012-08-06T16:50:02.370 回答