用lambda表达式连接3个表?

时间:2011-02-19 10:41:33

标签: c# .net wpf c#-4.0 lambda

我基本上希望将以下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张桌子。

1 个答案:

答案 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这样的东西,这会有所帮助。