C# 如何在NHibernate查询中使用Max和Group By?

C# 如何在NHibernate查询中使用Max和Group By?,c#,.net,linq,nhibernate,C#,.net,Linq,Nhibernate,如何使用NHibernate执行以下查询 SELECT ClientId, MAX(Id) FROM Items GROUP BY ClientId; 有关NHibernate的三个查询API,请参见NHibernate参考资料的第14、15和16章 您还可以在NHibernate上使用LINQ查询。这可能是开始时最简单的选择。使用Query()扩展方法对ISession进行扩展,以获得一个IQueryable,并设法解决它,这比我最终想象的要简单: var resul

如何使用NHibernate执行以下查询

SELECT ClientId, MAX(Id)
FROM Items
GROUP BY ClientId;

有关NHibernate的三个查询API,请参见NHibernate参考资料的第14、15和16章


您还可以在NHibernate上使用LINQ查询。这可能是开始时最简单的选择。使用
Query()
扩展方法对
ISession
进行扩展,以获得一个
IQueryable

,并设法解决它,这比我最终想象的要简单:

            var result = from item in session.Linq<Item>()
                         group item by item.ClientId
                         into itemGroups
                         select new
                             {
                                 id = itemGroups.Key,
                                 max = itemGroups.Max(er => er.Id)
                             };
var result=来自session.Linq()中的项
按项分组。ClientId
分为项目组
选择新的
{
id=itemGroups.Key,
max=itemGroups.max(er=>er.Id)
};

嗯,我不太了解NHibernate,但这取决于您的映射吗?您更喜欢哪种查询API?查询(Linq)、QueryOver、HQL或ICriteria?我更喜欢Linq,但QueryOver或ICriteria中的解决方案也可以