【发布时间】:2017-07-09 04:43:44
【问题描述】:
这是我的 SQL 语句:
SELECT p.*
FROM p
LEFT JOIN q ON p.id = q.id AND p.name = q.name
WHERE q.id IS null
我正在尝试将此代码转换为 LINQ 表达式。
【问题讨论】:
这是我的 SQL 语句:
SELECT p.*
FROM p
LEFT JOIN q ON p.id = q.id AND p.name = q.name
WHERE q.id IS null
我正在尝试将此代码转换为 LINQ 表达式。
【问题讨论】:
var query = from t1 in p
join q1 in q on t1.name equals q1.name
where q1.id == null
select t1;
【讨论】:
var data = (from a in p
from b in q.Where(x => x.id == a.id && x.name == a.name).DefaultIfEmpty()
WHERE b.id == null
select a).ToList();
此外,您可以尝试Linqer 将您的SQL 查询转换为Linq
【讨论】:
一般来说,假设 C#,通过按 LINQ 理解语法顺序转换短语,将 SQL 转换为 LINQ,如果 SQL 有表别名,则在 LINQ 中将它们用作范围变量。
您似乎正在尝试进行左反半连接。
from pr in p
join qr in q on new { pr.id, p.name } equals { qr.id, qr.name } into qj
from qr in qj.DefaultIfEmpty()
where qr == null
select pr
通常会这样做
from pr in p
where !qr.Any(q => q.id == pr.id && q.name.Equals(pr.name))
select pr
【讨论】: