【发布时间】:2010-12-21 09:27:38
【问题描述】:
我一直在尝试 NHibernate 3 和 LINQ to NHibernate。我无法让它吐出正确的 T-SQL 查询。
这是我的域模型:
Employee { id, name }
Department { id, name }
EmployeeDepartment { id, employee_id, department_id, startdate, enddate }
AttendanceRegistration { id, datetime, employee_id }
现在假设我想选择当时连接到某个部门的“2010-10-1”和“2010-11-1”之间的所有出席注册。
DateTime start = new DateTime(2010,10,1);
DateTime end = new DateTime(2010,11,1);
var list =
from ar in session.Query<AttendanceRegistration>()
where
start <= ar.datetime && ar.datetime > end && (
from ed in session.Query<EmployeeDepartment>()
where
ed.startdate <= ar.datetime && ed.enddate > ar.datetime &&
ed.department_id = 1
select ed.employee_id
).Contains(ar.employee_id)
select ar;
生成的 SQL 代码如下所示:
select ar.id, ar.datetime, ar.employee_id
from AttendanceRegistration ar
where
'2010-10-1 00:00:00' <= ar.datetime and '2010-11-1' > ar.datetime and exists (
select ed.employee_id
from EmployeeDepartment ed
where
ed.department_id=1 and
ed.startdate <= ar.datetime and
ed.enddate > ar.datetime and
ed.id=ar.employee_id
)
这几乎是好的 :-) 唯一的错误是
ed.id=ar.employee_id
这应该是:
ed.employee_id=ar.employee_id
有人知道如何让 LINQ to NHibernate 吐出正确的 T-SQL 查询吗?
【问题讨论】:
-
这个问题是否已经解决,因为如果有同样的问题。
标签: nhibernate linq-to-nhibernate