#c# #nhibernate #criteria
#c# #nhibernate #критерии
Вопрос:
Мне нужно найти самый последний отчет, отправленный сотрудниками, используя запрос NHibernate criteria. Я уверен, что мне нужно использовать проекции, но я не могу понять, как это настроить.
Перефразирование моей модели домена:
public class Employee
{
public int Id {get; set;}
public string Name {get; set;}
}
public class Report
{
public int Id {get; set;}
public DateTime? Submitted {get; set;}
public Employee Employee {get; set;}
// Other report properties omitted
}
Если бы было 5 сотрудников, у каждого из которых было по 7 отчетов, запрос должен возвращать 5 отчетов, по одному на сотрудника, при этом представленное свойство не равно null и является самым последним для этого сотрудника.
Ответ №1:
Я не совсем уверен в этом, но проверьте это:
var rst = session.CreateCriteria<Report>()
.SetProjection(Projections.GroupProperty("Employee"))
.SetProjection(Projections.Max("Submitted"))
.Add(NHibernate.Criterion.Expression.IsNotNull("Submitted")).List();
Комментарии:
1. возможно, вы не уверены, но я уверен — я использовал в основном точно такой же запрос в своем проекте, и он отлично работает.
2. Спасибо за ответ. Это в основном возвращает один элемент, который является объектом DateTime.