2010-11-22 5 views
1

エンティティフレームワーク、ライブラリおよびブックに2つのテーブルがあるとします。これらは、Library_Bookと呼ばれる別のテーブルとの多対多の結合にありますが、結合テーブルのように隠されています。エンティティフレームワークの多対多テーブルの問い合わせ

ライブラリ内のすべてのブックのリストを結合テーブルから返すことなく、ライブラリが特定のブックを持っているかどうかをLINQで調べるにはどうすればよいですか?代わりに、bookIdとLibraryIdを持つレコードのみ。

事前に感謝します。

bool hasIt = (from l in Libraries from b in l.Books where b.Id == 5 where l.Id == 3 
select l).Any(); 

このLINQクエリは、ライブラリまたはブックのテーブルのいずれかには触れません。知られているライブラリが知られている本を持っている場合、あなたはこのような何かを行うことが決定し

+0

可能な重複:([私は多対多の関係の値を返しますどのようにLINQとエンティティを使用する] http://stackoverflow.com/questions/4235978/using-linq -and-entity-how-do-i-return-many-many-relationshipの値/ 4235997#4235997) –

答えて

1

。それは次のようになります。

SELECT 
CASE WHEN (EXISTS (SELECT 
    1 AS [C1] 
    FROM [dbo].[LibraryBookIntersection] AS [Extent1] 
    WHERE (5 = [Extent1].[BookId]) AND (3 = [Extent1].[LibraryId]) 
)) THEN cast(1 as bit) WHEN (NOT EXISTS (SELECT 
    1 AS [C1] 
    FROM [dbo].[LibraryBookIntersection] AS [Extent2] 
    WHERE (5 = [Extent2].[BookId]) AND (3 = [Extent2].[LibraryId]) 
)) THEN cast(0 as bit) END AS [C1] 
FROM (SELECT 1 AS X) AS [SingleRowTable1] 
+0

返信ありがとうございます。私は、結合テーブルLibrary_Bookにいくつかの値を設定して上記のLINQ文をテストしましたが、falseを予期しているときにtrueを返すことがあります。それは奇妙に見える。これはなぜでしょうか? – user375564

+0

@ user375564あなたはあなたのLinqクエリを投稿して、私にその真偽が正しいのではないことを検証するために使用しているTSQLを表示しなければならないでしょう。 –

+0

bool hasIt =(from _ctx.Lirariesからl) b from _ctx.Books l.Id == 1 b.Id == 3 選択l).Any(); IDLibrary = 1およびidBook = 3のLibray_BookからCOUNT(*)を選択 最初にhasIt = Trueを返しますが、2番目のステートメントは0を返します。 – user375564

関連する問題