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,非常感谢。我认为这样的人很有才华。这里的学习负荷很大。