2012-02-28 4 views
1

テーブルAとテーブルBの間に多少の関係があります。EFコードファーストでの結合テーブルへの照会方法を教えてください。

私は最初にコードを使用していたので、DBテーブル 'AB'が自動的に作成されました。私はそれのためのエンティティモデルを持っていません。

たとえば、A.id=xに属するすべてのBをクエリできますか?

編集:私はAかBのどちらかをロードした後

、私は簡単にそれぞれのリストBおよびAへの参照を取得することができます。

私の本当の問題は、これは私が何をしたいですすでにA.

に関連付けられているすべてのBさんを除外し、単一のクエリを作成します

query.Where(**b.ID NOT IN (SELECT B.ID FROM AB WHERE A=5)**) 

私はこれを行うことができます確信しています生のSQLクエリを使用していますが、一貫性があり、IQueryable/LINQを使用できるようにしたいと考えています。

+1

あなたのエンティティを投稿することができますか? – cadrell0

答えて

2

からすべてのBsをretriveするクラスのプロパティを持っている必要があります。この試すことができます:

var bsNotAssociatedWithA5 = context.Bs 
    .Where(b => !b.As.Any(a => a.Id == 5)) 
    .ToList(); 

これは、次のSQLを作成します。

SELECT 
[Extent1].[BId] AS [BId], 
[Extent1].[BColumn1] AS [BColumn1], 
// more columns 
FROM [dbo].[Bs] AS [Extent1] 
WHERE NOT EXISTS 
    (SELECT 1 AS [C1] 
    FROM [dbo].[ABs] AS [Extent2] 
    WHERE ([Extent1].[BId] = [Extent2].[BId]) AND (5 = [Extent2].[AId])) 

編集

DbContext(EF> = 4.1)を使用する場合は、あなたがIQueryableToString()を使用してSQLを調べることができますが:

var bsNotAssociatedWithA5Query = context.Bs 
    .Where(b => !b.As.Any(a => a.Id == 5)); 

string sql = bsNotAssociatedWithA5Query.ToString(); 

var bsNotAssociatedWithA5 = bsNotAssociatedWithA5Query.ToList(); 
+0

あなた...あなたは英雄です。それは完璧に働いた。 (btw、生成されたSQLをどうやって抽出したのですか?) – getit

+0

@getit:これは簡単です。 – Slauma

+0

パーフェクト、もう一度ありがとう – getit

1

A.Bs

あなたはAのインスタンスを持っている場合は、A.

+0

ありがとう、私はより具体的にすべきだと思います。 – getit