2016-06-23 10 views
1

こんにちは私は問題に固執して誰かが私に答えを説明することができます願っています!linqクエリエンティティのフレームワークテーブルを結合する方法?ナビゲーションプロパティ?

は、だから私のデータベースに私はこのような接続3つのテーブルを持っている:

Customer   CustomerAddress  Address 
-CustomerID  -CustomerID   -AddressID 
-FirstName  -AddressID    -Street 
-LastName        -City 

だから私は私のエンティティモデルと中間テーブル(CustomerAddress)が除去され、ナビゲーションプロパティによって置き換えられて作りますか?

私がしようとしているのは、C#でLINQクエリを使用してテーブルを結合することです。何customeraddressテーブルが存在しないので、私はここにthatsのないケースを実現

Select * 
From dbo.customer as c 
left join dbo.customeraddress as ca on c.customerID = ca.customerID 
left Join dbo.Address as a on a.addressID = ca.addressID 

: SQLでクエリは次のようになります。ナビゲーションプロパティの列を使用して結合を行いますか?私のモデルダイアグラムには、Customerクラス/テーブルにAddressesというナビゲーションプロパティがあり、CustomersというAddressクラス/テーブルプロパティにマップされているようです。

だから私はこの試みた:

var customerQuery = (from customer in db.Customers 
        join address in db.Addresses on customer.Addresses equals address.Customers into add 
        from rt2 in add.DefaultIfEmpty() 
        select new { //.. }); 

をしかし、私はそれらを結合するためにナビゲーションプロパティをどうするかわからない午前としてそれは、明らかに間違っています。私がこのモデルに参加する方法を誰かが私に説明できるかどうか本当に感謝します!

+0

どうしても1つのテーブルを作ってみませんか?ただし、結合されたテーブルから選択できるようにするには、emに参加したいと明確にするだけですが? – Niklas

答えて

1

ナビゲーションプロパティは、オブジェクトの場合のようにクエリで使用します。ジョインを使用する必要はなく、EFによって生成されます。例えば

、クエリは次のようになります:

var customerQuery = (from customer in db.Customers 
        from address in customer.Addresses.DefaultIfEmpty() 
        select new { //.. }); 

これはあなたのためのleft outer joinを生成します。 inner joinが必要な場合は、DefaultIfEmpty()を削除してください。

+1

ありがとう、これは私が欲しかったものです! – 7q9l4n1d

+0

お客様と住所の関係が1:1の場合はどうなりますか? DefaultIfEmptyメソッドは使用できません。 –

+0

私はそれを理解したと思う。 'db.Customers.Where(c => c.Address).DefaultIfEmpty();'のようになります。 –

関連する問題