如何使用LINQ方法语法实现LEFT OUTER JOIN查询
正确实现(LINQ方法语法)
var result = db.Customers .GroupJoin( db.Orders, customer => customer.Custid, order => order.Custid, (customer, matchedOrders) => new { customer, matchedOrders } ) .SelectMany( pair => pair.matchedOrders.DefaultIfEmpty(), (pair, order) => new { pair.customer.Custid, pair.customer.Companyname, orderid = order == null ? -1 : order.Orderid } );
说明
你最初使用的Join是内连接方法,仅返回两边关联键匹配的记录,所以会过滤掉没有对应订单的客户。
查询语法中的join ... into逻辑对应方法语法的GroupJoin方法,它会将每个客户匹配到的所有订单聚合为一个集合,再配合DefaultIfEmpty()保证当某客户没有匹配订单时,也会返回一条空值记录,完全等价你写的查询语法,生成的SQL也和原T-SQL的左外连接一致。
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

