【发布时间】:2017-08-30 07:36:09
【问题描述】:
这就是场景。 我有两个表处于 1 对 M 关系;
为了便于说明,我们将它们定义为
MyHeaderTable (headerID, col1, col2)
MyDetailTable (lineID, headerID, statusID, col3, col4)
注意子行是可选的(标题记录可能没有对应的行,因此是左连接。
我对使用 T-SQL 的以下结果集感兴趣:
SELECT MyHeaderTable h
LEFT JOIN MyDetailTable c ON h.headerID = c.headerID
WHERE c.lineID IS NULL -- no corresponding children
OR (c.lineID is NOT NULL AND c.statusID != 2) -- children rows must have status NOT 2
问题是我如何在 EF6 linq 中编写上述 T-SQL ?
我的尝试出现在下面,但我无法使用 IS NULL 和 IS NOT NULL 生成 linq 查询:
var query = from h in ctx.MyHeaderTable
join c in ctx.MyDetailTable on h.headerID equals c.headerID into joinedTbl
from j in joinedTbl.DefaultIfEmpty() //LEFT JOIN
where j.lineID is null
|| (j.lineID != null && j.statusID !=2)
select;
var results = query.ToList();
*注意 EF6 的具体版本,我知道 EF 已经发展,并且对早期版本的功能不感兴趣。
【问题讨论】:
标签: c# entity-framework linq isnull dbnull