2016-10-06 61 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);