是否可以在Entity Framework Core(或7)中加载表中没有相关记录的所有记录?
在我的情况下,我有一个Customers表和一个Contracts表。客户可以拥有0到N个合同。在这个特定用例中,我想查询所有没有合同的客户。
**Customer Table:**
CustomerId | Name
---------- | ----------
1 | Apple
2 | Google
3 | Microsoft
**Contracts Table:**
| ContractId | CustomerId | StartDate | EndDate |
| ---------: | ---------: | ---------- | ---------- |
| 1 | 2 | 01-01-2016 | 01-01-2018 |
| 2 | 3 | 01-01-2016 | 01-01-2018 |
在这种情况下,我希望查询只返回一个包含Apple客户的对象。
在SQL中我会做这样的事情:
select cust.CustomerId, cust.Name
from dbo.Customers as cust
left outer join dbo.Contracts as contr
on cust.CustomerId = contr.CustomerId
where contr.ContractId is null;
如何将其转换为EF查询?
答案 0 :(得分:2)
你只需要一个linq查询来实现你想要的东西(独立于EF版本):
var result = yourContext
.Customers
.Where(x => !yourContext.Contracts.Any(y => x.Id == y.CustomerId));
当然,我认为在您的客户实体CustomerId
中称为Id
。
答案 1 :(得分:0)
在List<Contracts>
课程中添加属性Customer
,您可以通过以下查询获得没有合同的客户:
var customersWithZeroContract = db.Customers.Where(c => c.Contracts.Count() == 0);