Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ:当联接表中的计数等于零时列出所有_C#_Mysql_Linq - Fatal编程技术网

C# LINQ:当联接表中的计数等于零时列出所有

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

目前我有两张桌子

1) “工作”列表

2) 与每个作业相关的“发票”列表

| 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())