2016-11-29 9 views
0

Entity Framework Core(または7)では、関連するレコードを他のテーブルに持たないテーブルからすべてのレコードをロードできますか表?EF.Core関連するレコードを他のテーブルに持たないすべてのレコードを読み込みます。

私の場合、私は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の顧客を含むオブジェクトを1つだけ返すようにしたいと思います。 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クエリにこれを変換することができますか?

答えて

2

あなただけ(EFバージョンとは無関係に)あなたはこのように欲しいものを達成するためにLINQクエリを必要とする:もちろん

var result = yourContext 
    .Customers 
    .Where(x => !yourContext.Contracts.Any(y => x.Id == y.CustomerId)); 

私はあなたの顧客エンティティCustomerIdIdと呼ばれていることを想定。

+0

おかげで、とても簡単で、魔法のように動作します –

0

CustomerクラスのプロパティList<Contracts>を追加して、次のクエリでいない契約を結んでいる顧客を取得することができます:

var customersWithZeroContract = db.Customers.Where(c => c.Contracts.Count() == 0); 
関連する問題