2016-10-06 4 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

Это отношение многие ко многим (не правда ли?)

И вот что я хочу сделать is: Найти все слова для определенного курса.

Я ищу самый простой способ сделать это. Этот запрос (в первом сообщении) - похоже, что он работает с коррекцией, но я не мог переписать его в 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); 
Смежные вопросы