Запрос NHibernate (hql против критериев) - PullRequest
2 голосов
/ 16 марта 2011

У меня есть hql строка запроса

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

Как мне написать это без HQL в NHibernate (используя критерии)?

1 Ответ

2 голосов
/ 17 марта 2011

Это может представлять интерес для проблемы DateTime + TimeSpan.

Это будет работать в вашем случае:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...