Asp.net 使用Nhibernate在子查询中仅选择不带group by属性的max子句
我有如下SQL查询:Asp.net 使用Nhibernate在子查询中仅选择不带group by属性的max子句,asp.net,nhibernate,subquery,grouping,Asp.net,Nhibernate,Subquery,Grouping,我有如下SQL查询: select * from dbo.table1 where Id in ( select max(id) as id from dbo.table1 group by prop1, prop2, prop3 ) 我想创建一个NHibernate查询,它可以为我做这件事。我试着用QueryOver,但没用。你对如何做有什么建议吗 NHibernate甚至支持这种查询。请参阅文档中的详细信息:。我们只需将SQL代码片段中的查询分成两部分: 内选 使用IN子句选择 让
select * from dbo.table1 where Id in
(
select max(id) as id from dbo.table1 group by prop1, prop2, prop3
)
我想创建一个NHibernate查询,它可以为我做这件事。我试着用QueryOver,但没用。你对如何做有什么建议吗 NHibernate甚至支持这种查询。请参阅文档中的详细信息:。我们只需将SQL代码片段中的查询分成两部分: 内选 使用IN子句选择 让我们假设Questin中的dbo.table1映射到MyEntity。 要创建内部选择,让我们使用DetachedCriteria 使用分组依据SqlGroupProjection编辑扩展 SqlGroupProjection方法有一个摘录: 分组SQL投影,同时指定select子句和group by 子句片段 注意:我甚至提供了最后两个参数,但在本例中,它们可能为空:new string[],new IType[]{}。这些仅用于从数据到实体的转换物化。事实并非如此,我们只是在构建内部选择
// the select with IN clause
var result = session.CreateCriteria(typeof(MyEntity))
.Add(Subqueries.PropertyIn("ID", innerSelect))
.List<MyEntity>();
也可能是相关的,但我知道。问题是当您将DetachedCriteria innerSelect=DetachedCriteria.FortypeofMyEntity.SetProjectionList.AddProjections.MaxID.AddProjections.GroupPropertyprop1;您无法执行子查询。PropertyInID,innerSelect,因为您将获得如下sql查询:select*from dbo.table1,其中select maxid中的Id,prop1 as Id from dbo.table1 group by prop1对不起,在我完成注释之前,我已经输入了return。我刚刚用内部select上的group by语句扩展了答案。这会有帮助吗?好的,正如你在我的第一篇文章中看到的,我在nhibernate中创建了一个查询。你给我举了一个max clasue的例子。好的,我知道这种情况会很有效,但是如果你用几个属性分组,并且使用投影只取id属性的最大值,这将是一个问题。我是这样做的:DetachedCriteria innerSelect=DetachedCriteria.FortypeofMyEntity.SetProjectionList.AddProjections.MaxID.AddProjections.GroupPropertyprop1.AddProjections.GroupPropertyprop2.AddProjections.GroupPropertyprop3;session.CreateCriteriatypeofMyEntity.AddSubqueries.PropertyInID,innerSelect。列表它不起作用,因为在子查询中。PropertyInID,innerSelect;它不止一个属性。也许你知道一些技巧
// the select with IN clause
var result = session.CreateCriteria(typeof(MyEntity))
.Add(Subqueries.PropertyIn("ID", innerSelect))
.List<MyEntity>();