2016-10-06 6 views
0

LINQを使用してこのクエリを書く方法は?SQLクエリ - > LINQ

私は本当にそれを得ることができません。私はそれが(?それはない)多くの多くの関係だ

そして、それは私が何をしたいのです3つのテーブル

EntityFramework classes

enter image description here

を持って

Select tblKeywords.Keyword AS CoursesKeyWords 
From 
    tblCourse_KeyWord 
Join 
    tblCourses ON tblCourses.ID = tblCourse_KeyWord.Course_ID 
Join 
    tblKeywords ON tblKeywords.ID = tblCourse_KeyWord.KeyWord_ID 
Where 
    tblCourses.ID = 1 

: 特定のコースのすべてのキーワードを検索します。

私はそれを行う最も簡単な方法をお探しです。 その質問(最初の投稿) - それはうまく動作するようですが、私はLinqで書き直すことができませんでした。

私はあなたがこれらのテーブル/ビューを持っていることを前提とし
+4

あなたが試したものをご提示ください。私はすぐに人々がこの質問に答えてくれると確信していますが、正直なところ、Stack Overflowの目的はコードを書くことではありません。 –

+1

また、EFを使用しているかどうかを指定し、モデルを表示してナビゲーションプロパティを表示するように指定します。 –

+0

この特定のケースには過去に回答していないため、このトピックをオフトピックとして閉じるよう投票しています。 – hometoast

答えて

2

:tblCourse_KeyWord、tblCourses、コンテキストにマッピングされたtblKeywordsが、それは "CTX" であるとする

結果は次のようになります。

from p in ctx.tblKeywords 
join rel in ctx.tblCourse_KeyWord 
on new { KeyWord_ID = (int?)p.ID, CourseId = 1 } equals new { KeyWord_ID = (int?)rel.KeyWord_ID, CourseId = rel.Course_ID } 
select p.Keyword 

(何からあなたは条件(Course_Id = 1)を関係と結びつけることができるので、2番目の結合を実行する必要はありません。

ハッピーコーディング!

0

文脈がdbで、すべての名前がSQLと同じであると仮定します。 (George Lica answerが示唆したように)

db.tblCourse_KeyWord.Join(db.tblCourse, 
          c_kw => c_kw.Course_ID, 
          c => c.ID, 
          (c_kw, c) => new { CourseKW = c_kw, Course = c}) 
        .Where(x => x.Course.ID == 1) 
        .Join(db.tblKeywords, 
          x => x.CourseKW.Keyword_ID, 
          k => k.ID, 
          (x, k) => new { CoursesKeyWord = k.Keyword }); 

しかし、それを簡略化することができる:クエリを変換する正確な方法は、次のようになります

db.tblKeywords.Join(db.tblCourse_KeyWord, 
        k => new { KID = k.ID, CID = 1 }, 
        c_kw => new { KID = c_kw.Keyword_ID, CID = c_kw.Course_ID}, 
        (k, c_kw) => k.Keyword);