Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
NHibernate如何使用HQL根据特定属性选择不同的对象?_Nhibernate_Hql - Fatal编程技术网

NHibernate如何使用HQL根据特定属性选择不同的对象?

NHibernate如何使用HQL根据特定属性选择不同的对象?,nhibernate,hql,Nhibernate,Hql,如何使用HQL选择满足特定条件的特定对象 我们尝试了以下方法来生成十大订阅RSS源的列表(其中SubscriptionCount是派生属性): 可以精简结果,以便在从数据库获取数据后删除两个唯一的提要URL,但必须有一种方法可以使用HQL在DB级别执行此操作 编辑:我们意识到可以执行标量查询,然后手动提取值,但是没有一种方法可以简单地为被提取的对象指定匹配条件吗?是rss.FeedUrl的组造成了问题。看起来您不需要它,因为您正在选择实体本身。去掉那个,我想你会很好的 编辑-抱歉,我没有注意到“

如何使用HQL选择满足特定条件的特定对象

我们尝试了以下方法来生成十大订阅RSS源的列表(其中SubscriptionCount是派生属性):

可以精简结果,以便在从数据库获取数据后删除两个唯一的提要URL,但必须有一种方法可以使用HQL在DB级别执行此操作


编辑:我们意识到可以执行标量查询,然后手动提取值,但是没有一种方法可以简单地为被提取的对象指定匹配条件吗?

是rss.FeedUrl的
组造成了问题。看起来您不需要它,因为您正在选择实体本身。去掉那个,我想你会很好的


编辑-抱歉,我没有注意到“派生属性”部分。我假设您的意思是它不是Hibernate映射属性,因此表中实际上没有列?这将解释您在查询中收到的第二条错误消息。如果出现这种情况,您可能还需要删除“orderby”子句,并用Java进行排序。

是rss.FeedUrl的
组造成了问题。看起来您不需要它,因为您正在选择实体本身。去掉那个,我想你会很好的


编辑-抱歉,我没有注意到“派生属性”部分。我假设您的意思是它不是Hibernate映射属性,因此表中实际上没有列?这将解释您在查询中收到的第二条错误消息。如果是这种情况,您可能还需要删除“orderby”子句,并用Java进行排序。

您需要执行标量查询。以下是NHibernate文档中的一个示例:

IEnumerable results = sess.Enumerable(
    "select cat.Color, min(cat.Birthdate), count(cat) from Cat cat " +
    "group by cat.Color"
);
foreach ( object[] row in results )
{
    Color type = (Color) row[0];
    DateTime oldest = (DateTime) row[1];
    int count = (int) row[2];
    .....
}

您需要执行标量查询。以下是NHibernate文档中的一个示例:

IEnumerable results = sess.Enumerable(
    "select cat.Color, min(cat.Birthdate), count(cat) from Cat cat " +
    "group by cat.Color"
);
foreach ( object[] row in results )
{
    Color type = (Color) row[0];
    DateTime oldest = (DateTime) row[1];
    int count = (int) row[2];
    .....
}

如果将HQL稍微更改为这样:

var topTen = UoW.Session.CreateQuery( @"SELECT distinct rss.FeedUrl
                                          FROM RssFeedSubscription rss
                                          group by rss.FeedUrl
                                          order by rss.SubscriptionCount DESC
                                        ")
.SetMaxResults(10)
.List();
topTen变量将是一个对象[],其中包含2个元素,即2个提要URL


如果您使用IQuery Interbase的SetResultTransformer()方法,则可以将此作为强类型集合返回。

如果您稍微更改HQL,使其如下所示:

var topTen = UoW.Session.CreateQuery( @"SELECT distinct rss.FeedUrl
                                          FROM RssFeedSubscription rss
                                          group by rss.FeedUrl
                                          order by rss.SubscriptionCount DESC
                                        ")
.SetMaxResults(10)
.List();
topTen变量将是一个对象[],其中包含2个元素,即2个提要URL


如果使用IQuery Interbase的SetResultTransformer()方法,则可以将此作为强类型集合返回。

是的,我们也尝试过这种方法,但认为作为SQL调用的一部分,可能会有更干净的方法。是的,我们也尝试过这种方法,但是我认为作为SQL调用的一部分,可能会有一种更干净的方法。是的,这会导致EXCPIONT,但是删除它仍然不会产生我们想要的结果。是的,这会导致EXCPIONT,但是删除它仍然不会产生我们想要的结果