NHibernate查询(hql vs criteria)

时间:2011-03-16 15:55:49

标签: nhibernate hql

我有一个 hql查询字符串

from  MyTable table
where table.StartTime + table.Duration >= : startTime
and   table.MyId = : id

如何在NHibernate中使用HQL(使用条件)编写此文件?

1 个答案:

答案 0 :(得分:2)

对于DateTime + TimeSpan问题,

This可能会引起关注。

这适用于您的情况:

QueryOver:

int id = 1;
DateTime startTime = DateTime.Now.AddDays(5.0);

var vacations = session.QueryOver<Vacation>()
    .Where(v => v.Employee.Id == id)
    .And(v => v.StartDate > startTime 
     || (v.StartDate == startTime.Date && v.Duration >= startTime.TimeOfDay))
    .List();

的ICriteria:

var vacationsCrit = session.CreateCriteria(typeof(Vacation))
    .Add(Expression.Eq("Employee.Id", id))
    .Add(Expression.Disjunction()
        .Add(Expression.Gt("StartDate", startTime))
        .Add(Expression.Conjunction()
            .Add(Expression.Eq("StartDate", startTime.Date))
            .Add(Expression.Ge("Duration", startTime.TimeOfDay))))
    .List();

两者都将输出完全相同的SQL。应该提到你不能做这样的事情,如上面的链接所述:

var vacations = session.QueryOver<Vacation>()
    .Where(v => v.Employee.Id == id)
    .And(v => v.StartDate.Add(v.Duration) >= startTime) // <-- this will NOT work
    .List();
相关问题