Запрос NHibernate Criteria для выбора самого последнего элемента для каждого типа

#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.