2016-10-06 56 views
0

如何使用LINQ編寫此查詢?SQL查詢 - > LINQ

我真的不明白。

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 

我有三個表

EntityFramework classes

enter image description here

這是關係多對多(是不是?)

而這正是我想做的事是: 查找指定課程的所有關鍵字。

我正在尋找最簡單的方法來做到這一點。 該查詢(在第一篇文章) - 它看起來像它的工作correclty,但我不能在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)。)

快樂編碼!

0

假設您有一個名爲db的上下文,並且所有名稱與SQL中的名稱相同。翻譯查詢確切的方法是這樣的:

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 }); 

但它可以簡化(如George Lica answer建議)到:

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);