Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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#_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 如何编写排除链接表中相关记录的LINQ?

C# 如何编写排除链接表中相关记录的LINQ?,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我有两张桌子 Client ClientReport 我需要编写一些LINQ,列出不在ClientReport表中的所有客户机,即我需要列出与特定报告无关的所有客户机 这是我的出发点: var ClientList = db.StdClient.ToList(); 非常感谢 编辑: 抱歉,我忘记了一个重要的要求,那就是过滤器必须是特定于报表的。ReportId作为参数输入到操作中 编辑2: var ClientList = db.StdClient

我有两张桌子

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

这是我的出发点:

 var ClientList = db.StdClient.ToList();
非常感谢

编辑:


抱歉,我忘记了一个重要的要求,那就是过滤器必须是特定于报表的。ReportId作为参数输入到操作中

编辑2:

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

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

如果存在从
Client
ClientReport
的导航属性:

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

如果它特定于一个报告ID

否则

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

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

如果存在从
Client
ClientReport
的导航属性:

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

如果它特定于一个报告ID

否则

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

您也可以使用
。除了
,但我还没有测试过它

差不多


var noReport=ClientList.Except(ClientReportList)

您也可以使用
。除了
,但我还没有测试它

差不多


var noReport=ClientList.Except(ClientReportList)

是的,我有一个导航属性,它是一对多的。。。。所以现在就试试吧。感谢您的及时回复。很抱歉,您忘记了一个重要的要求,那就是过滤器必须是特定于报表的。ReportId作为一个参数输入到操作中。
cr=>cr.ClientId==c.Id&&cr.ReportId==reportIdParam
谢谢Gert,我认为我们在同一时间到达了同一点:)不过,很高兴知道我走的是正确的路线。唯一的问题是我有导航属性,我有一个一对多的表,所以我可以使用“D Stanley”的第一个选项,但不确定如何调整,或者只是将您的条件放入Any()?@DStanley,非常感谢。我认为这样的人很有才华。这里的学习负荷。是的,我有一个导航属性,它是一对多。。。。所以现在就试试吧。感谢您的及时回复。很抱歉,您忘记了一个重要的要求,那就是过滤器必须是特定于报表的。ReportId作为一个参数输入到操作中。
cr=>cr.ClientId==c.Id&&cr.ReportId==reportIdParam
谢谢Gert,我认为我们在同一时间到达了同一点:)不过,很高兴知道我走的是正确的路线。唯一的问题是我有导航属性,我有一个一对多的表,所以我可以使用“D Stanley”的第一个选项,但不确定如何调整,或者只是将您的条件放入Any()?@DStanley,非常感谢。我认为这样的人很有才华。这里的学习负荷很大。