作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试 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 }
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;
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
最佳答案
我遇到了同样的问题。我找到了解决这个问题的方法。您的查询可以改写如下。基本上不是使用 Contains() 运算符,而是在 where 子句中显式添加谓词并使用 Any() 运算符。
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
&& ed.employee_id == ar.employee_id
select ed
).Any()
select ar;
关于nhibernate - LINQ to NHibernate WHERE EXISTS IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497802/
我是一名优秀的程序员,十分优秀!