Если я хорошо понимаю вопрос, Марк хочет увидеть обзор всех последних результатов для каждого типа.
Это означает, что для каждого типа результата он хочет видеть только одну строку, и это результат, который был добавлен последним для этого типа.
Я думаю, что самый простой способ добиться этого - создать дополнительный класс, который мы можем назвать MyResultOverview, например:
public class MyResultOverview
{
public int ResultId {get; set;}
public int ResultTypeId {get; set;}
public DateTime ResultDate {get; set;}
}
Этот класс не должен отображаться, но NHibernate должен знать, что этот класс существует. Поэтому нам придется импортировать его:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >
<import class="MyResultOverview" />
</hibernate-mapping>
Затем мы можем создать ICriteria, который будет заполнять экземпляры MyResultOverview (и который также будет генерировать наиболее эффективный SQL-запрос для получения этого обзора).
Это должно выглядеть примерно так:
ICriteria criteria = session.CreateCritera (typeof(MyResult));
criteria.SetProjection (Projections.ProjectionList ()
.Add (Projections.Property("Id"), "ResultId")
.Add (Projections.Property("ResultType"), "ResultType")
.Add (Projections.Max("ResultDate"), "ResultDate"));
criteria.SetResultTransformer (Transformers.AliasToBean (typeof(MyResultOverview)));
IList<MyResultOverview> results = criteria.List<MyResultOverview>();
Это должно дать вам список экземпляров MyResultOverview, которые представляют искомые результаты MyResults.
Затем, чтобы получить сам MyResult, вы можете просто сделать это, извлекая экземпляр MyResult для того Particalur ResultId, который вы также получили.
Я не проверял и не компилировал его, но я бы пошел по этому пути, чтобы достичь этого.