Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Nhibernate在子查询中仅选择不带group by属性的max子句_Asp.net_Nhibernate_Subquery_Grouping - Fatal编程技术网

Asp.net 使用Nhibernate在子查询中仅选择不带group by属性的max子句

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子句选择 让

我有如下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子句选择 让我们假设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.Max‌​ID.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>();