我基本上希望将以下sql查询作为lambda表达式:
SELECT studentname, coursename, grade
FROM student S, course C, grade G
WHERE S.id = G.studentid AND C.coursecode = G.coursecode AND G.grade<='B';
我遇到麻烦,因为我必须一起加入3张桌子。
答案 0 :(得分:5)
嗯,看起来像查询表达式:
var q = from grade in db.Grades
where grade.grade <= 'B'
join student in db.Students on grade.studentid equals student.studentid
join course in db.Courses on grade.coursecode equals course.coursecode
select new { student.studentname, course.coursename, grade.grade };
(我通常使用query
的变量名而不是q
- 我在此处仅使用q
进行格式化。)
你可以将其转换为带有lambda表达式的显式Join
调用,但我强烈建议你对这样的复杂查询使用查询表达式。
请注意,我已经更改了查询的顺序,以允许“where”子句尽可能简单有效地表达。很可能SQL查询规划器无论如何都会优化它,但对于像LINQ to Objects这样的东西,这会有所帮助。