我found以下linq表达式,我想知道into
关键字在基于方法的语法中是如何转换的?
var q = from pd in dataContext.tblProducts
join od in dataContext.tblOrders on pd.ProductID equals od.ProductID
into t
from rt in t.DefaultIfEmpty()
orderby pd.ProductID
select pd
答案 0 :(得分:2)
所有这些转换都在C#规范中描述。 7.16.2查询表达式翻译是关于C#的那一部分。
根据该规范,join
有两个案例into
:
带有
join
子句且into
后跟a的查询表达式select
条款from x1 in e1 join x2 in e2 on k1 equals k2 into g select v
被翻译成
( e1 ) . GroupJoin( e2 , x1 => k1 , x2 => k2 , ( x1 , g ) => v )
带有
之外的其他内容join
子句且后跟into
的查询表达式 除select
子句from x1 in e1 join x2 in e2 on k1 equals k2 into g …
被翻译成
from * in ( e1 ) . GroupJoin( e2 , x1 => k1 , x2 => k2 , ( x1 , g ) => new { x1 , g }) …
答案 1 :(得分:1)
根据this post @GertArnold,group ... into
linq查询语法使用了GroupJoin()方法:
var q1 = from pd in dataContext.tblProducts
join od in dataContext.tblOrders on pd.ProductID equals od.ProductID
into t
select t;
var q2 = dataContext.tblProducts
.GroupJoin(dataContext.tblOrders
, pd => pd.ProductID
, od => od.ProductID
, (pd, ods) => select new
{
Product = pd,
Orders = ods
});
上面的示例中的两个表达式都以类似的方式进行分组操作,尽管返回值不同。