C# LINQ:当联接表中的计数等于零时列出所有
目前我有两张桌子 1) “工作”列表 2) 与每个作业相关的“发票”列表C# LINQ:当联接表中的计数等于零时列出所有,c#,mysql,linq,C#,Mysql,Linq,目前我有两张桌子 1) “工作”列表 2) 与每个作业相关的“发票”列表 | invoice_id | job_id | invoice_amount | 1 | 1234 | 950 | 2 | 1234 | 120 | 3 | 5678 | 560 我需要找到一种方法来选择所有没有“发票”的“工作”-因此最终的预期结果将是: | job_id | job_name
| invoice_id | job_id | invoice_amount
| 1 | 1234 | 950
| 2 | 1234 | 120
| 3 | 5678 | 560
我需要找到一种方法来选择所有没有“发票”的“工作”-因此最终的预期结果将是:
| job_id | job_name |
| 9101 | Test Job #3 |
| 1475 | Test Job #4 |
我正在尝试一些事情,比如:
SELECT *
FROM jobs
WHERE NOT EXISTS (
SELECT * FROM invoices
WHERE jobs.job_id = invoices.invoice_id
)
还是没有运气。如何在LINQ中实现这一点?非常感谢您的帮助 Linq
var results = (from job in jobs
join invoice in invoices on job.job_id equals invoice.job_id into total
from record in total.DefaultIfEmpty()
where record == null
select job).ToList();
方法语法
GroupJoin有点棘手,同时也很方便
此表说明了GroupJoin的工作原理。(注意:注意在代码中使用k
和g
)
最终代码
var result = jobs.GroupJoin(invoices,r=>r.job_id,c=>c.invoice_id,
(k,g) => new {k,g})
.Where(x=>x.g.Count()==0)
.Select(s=> new {s.k.job_id,s.k.job_name}).ToList();
Linq
var results = (from job in jobs
join invoice in invoices on job.job_id equals invoice.job_id into total
from record in total.DefaultIfEmpty()
where record == null
select job).ToList();
方法语法
GroupJoin有点棘手,同时也很方便
此表说明了GroupJoin的工作原理。(注意:注意在代码中使用k
和g
)
最终代码
var result = jobs.GroupJoin(invoices,r=>r.job_id,c=>c.invoice_id,
(k,g) => new {k,g})
.Where(x=>x.g.Count()==0)
.Select(s=> new {s.k.job_id,s.k.job_name}).ToList();
Linq
var results = (from job in jobs
join invoice in invoices on job.job_id equals invoice.job_id into total
from record in total.DefaultIfEmpty()
where record == null
select job).ToList();
方法语法
GroupJoin有点棘手,同时也很方便
此表说明了GroupJoin的工作原理。(注意:注意在代码中使用k
和g
)
最终代码
var result = jobs.GroupJoin(invoices,r=>r.job_id,c=>c.invoice_id,
(k,g) => new {k,g})
.Where(x=>x.g.Count()==0)
.Select(s=> new {s.k.job_id,s.k.job_name}).ToList();
Linq
var results = (from job in jobs
join invoice in invoices on job.job_id equals invoice.job_id into total
from record in total.DefaultIfEmpty()
where record == null
select job).ToList();
方法语法
GroupJoin有点棘手,同时也很方便
此表说明了GroupJoin的工作原理。(注意:注意在代码中使用k
和g
)
最终代码
var result = jobs.GroupJoin(invoices,r=>r.job_id,c=>c.invoice_id,
(k,g) => new {k,g})
.Where(x=>x.g.Count()==0)
.Select(s=> new {s.k.job_id,s.k.job_name}).ToList();
您可以使用内部选择:
SELECT * FROM jobs
WHERE job_id NOT IN (SELECT job_id FROM invoices);
您可以使用内部选择:
SELECT * FROM jobs
WHERE job_id NOT IN (SELECT job_id FROM invoices);
您可以使用内部选择:
SELECT * FROM jobs
WHERE job_id NOT IN (SELECT job_id FROM invoices);
您可以使用内部选择:
SELECT * FROM jobs
WHERE job_id NOT IN (SELECT job_id FROM invoices);
那么你想要LINQ解决方案吗?您的尝试是在SQLso中进行的,您是否想要LINQ解决方案?您的尝试是在SQLso中进行的,您是否想要LINQ解决方案?您的尝试是在SQLso中进行的,您是否想要LINQ解决方案?你的尝试是在SQL中的,如果它解释了这些步骤的作用,那么这个答案会更有力。特别是GroupJoin可能会让刚接触Linq的人感到困惑。这是一种享受!非常感谢。(同意Eric J的评论——不过有点让人困惑)@EricJ:同意你关于GroupJoin的观点。补充说明!:)@安德烈·米利奇:完成了!如果OP具有导航属性,查询将变得更简单。大意是:
jobs.Where(j=>!j.Invoices.Any())代码>如果解释了这些步骤的作用,这个答案会更有力。特别是GroupJoin可能会让刚接触Linq的人感到困惑。这是一种享受!非常感谢。(同意Eric J的评论——不过有点让人困惑)@EricJ:同意你关于GroupJoin的观点。补充说明!:)@安德烈·米利奇:完成了!如果OP具有导航属性,查询将变得更简单。大意是:jobs.Where(j=>!j.Invoices.Any())代码>如果解释了这些步骤的作用,这个答案会更有力。特别是GroupJoin可能会让刚接触Linq的人感到困惑。这是一种享受!非常感谢。(同意Eric J的评论——不过有点让人困惑)@EricJ:同意你关于GroupJoin的观点。补充说明!:)@安德烈·米利奇:完成了!如果OP具有导航属性,查询将变得更简单。大意是:jobs.Where(j=>!j.Invoices.Any())代码>如果解释了这些步骤的作用,这个答案会更有力。特别是GroupJoin可能会让刚接触Linq的人感到困惑。这是一种享受!非常感谢。(同意Eric J的评论——不过有点让人困惑)@EricJ:同意你关于GroupJoin的观点。补充说明!:)@安德烈·米利奇:完成了!如果OP具有导航属性,查询将变得更简单。大意是:jobs.Where(j=>!j.Invoices.Any())代码>