我尝试加入,但我一直收到此错误
加入的路径! [选择 t.CourseId FROM Task as INNER JOIN 课程为c,CoursePermissions为cp WHERE(t.CourseId = 1)]
我有
const string query = "SELECT t.CourseId FROM Task as t INNER JOIN Courses as c, CoursePermissions as cp WHERE (t.CourseId = 1)";
var a = session.CreateQuery(query);
我正在努力实现我的Sql
SELECT dbo.Tasks.CourseId
FROM dbo.Tasks INNER JOIN
dbo.Courses ON dbo.Tasks.CourseId = dbo.Courses.CourseId INNER JOIN
dbo.CoursePermissions ON dbo.Courses.CourseId = dbo.CoursePermissions.CourseId
WHERE (dbo.Tasks.CourseId = 1)
我正在使用nhibernate 3.1和流利的nhibernate 1.2
答案 0 :(得分:16)
这意味着在HQL中使用内部联接与在SQL中使用它有点不同。在HQL中,您通过提供“path”来加入表,该路径基本上是您类的引用属性。
所以而不是
SELECT t.CourseId FROM Task as t INNER JOIN Courses as c ...
你需要写
// c.Taks is the IList property in your Courses class
SELECT t.CourseId FROM Courses as c INNER JOIN c.Tasks as t ...
答案 1 :(得分:0)
尽管Florian Lim提出了一个很好的解决方案,但就我而言,我没有 IList 来完成课程中的任务。我通过Theta-Style Joins实现了这一点,实际上Cartesian product提供了所有可能的组合,可以根据需要过滤(在where子句中)。