如何编写一些LINQ,排除链接表中的相关记录

本文关键字:记录 链接表 排除 何编写 LINQ | 更新日期: 2023-09-27 18:08:26

我有两个表

Client
ClientReport

我需要写一些LINQ,列出所有不在ClientReport表中的客户端,即我需要列出与特定报告不关联的所有客户端。

这是我的出发点:

 var ClientList = db.StdClient.ToList();
许多谢谢。

编辑:

对不起,我忘记了一个重要的要求,那就是过滤器需要是特定于报告的。reporttid作为参数输入到Action

EDIT2:

var ClientList = db.StdClient
                     .Where(c => !db.StdClientReport
                                     .Any(cr=>(
                                        (cr.StdClientId == c.Id) 
                                         && (cr.ReportId==ReportId)
                                               )
                                          )
                            ).ToList();

如何编写一些LINQ,排除链接表中的相关记录

这是假设ClientClientReport之间存在一对多关系,通过Client上的navigation属性和/或ClientReport上的ClientId属性。

如果有从ClientClientReport的导航属性:

var clientList = db.Client.Where(c => !c.ClientReports.Any());

int id = 7;  // report ID we're looking for
var clientList = db.Client.Where(c => !c.ClientReports
                                        .Any(cr => cr.ReportId == id)
                                );

如果它特定于一个报告ID。

否则

var clientList = db.Client.Where(c => !db.StdClientReport
                                         .Any(cr=>cr.ClientId == c.Id)
                                );

你也可以使用.Except,但我还没有测试过它

之类的

var noReport = ClientList.Except(ClientReportList);