0

我有 2 张桌子

Client
ClientReport

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

这是我的出发点:

 var ClientList = db.StdClient.ToList();

非常感谢。

编辑:

抱歉忘记了一个重要要求,那就是过滤器需要特定于报告。ReportId 作为参数输入到 Action

编辑2:

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

2 回答 2

3

这是假设通过导航属性 onClient和/或属性 on之间存在一对多关系。ClientReportClientClientIdClientReport

如果有从Clientto的导航属性ClientReport

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)
                                );
于 2013-04-10T20:24:13.013 回答
0

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

就像是

var noReport = ClientList.Except(ClientReportList);

于 2013-04-12T15:05:24.417 回答