【发布时间】:2016-11-11 18:21:03
【问题描述】:
假设我在 SQL 中有这个查询:
SELECT
....
FROM
TableA a
JOIN TableB b on a.Id = b.Id
我已经把它作为一个 linq 查询工作得很好:
var results = (from a in db.TableA
join b in db.TableB on a.Id equals b.Id
select new MyObject {...}).ToList();
但现在我也想在组合中添加一个左连接。在 SQL 中:
SELECT
....
FROM
TableA a
JOIN TableB b on a.Id = b.Id
LEFT JOIN TableC c on a.Id2 = c.Id2
我不确定如何在 linq 查询中处理这个问题。
【问题讨论】:
-
在你的tableB加入后加一行
join c in db.TableC on a.Id equals c.Id -
即使 TableC 现在有匹配的记录(c.ID2 为空),它的行为是否类似于 LEFT JOIN 并包含 TableA 中的所有行?
-
你知道怎么写left outer join in LINQ,不是吗?就像查询中没有其他联接一样编写它,例如
join c in TableC on a.Id2 equals c.Id2 into ac from c in ac.DefaultIfEmpty() -
你必须选择它
MyObject -
和往常一样,首先看看您可以设置哪些导航属性而不是使用连接(
TableA.TableBs等)。