在Nhibernate查询中对链接集合进行排序

时间:2009-05-05 20:29:53

标签: nhibernate

这部分与this有关 我想找到一种直接在Nhibernate查询中对链接(HasMany)集合结果进行排序的方法。

 ICriteria criteria = Session.CreateCriteria(typeof(PortalPage));
 criteria.CreateAlias("PartialViews", "vc");
 criteria.AddOrder(Order.Asc("vc.ColumnNumber"));
 criteria.Add(Property.ForName("Url").Eq(pageUrl));
 return criteria.UniqueResult<PortalPage>();

使用ORDER BY正确生成一个select,但不会对链接集合中的结果进行排序。

我想避免在返回结果后对集合进行排序(比如使用linq到对象)这可能吗?

更新: 正如史蒂夫所说,这个问题可以通过在映射中对order属性进行硬编码来解决,如:

HasMany(x => x.PartialViews).KeyColumnNames.Add("PageId").AsBag().SetAttribute("order-by", "ColumnNumber");

1 个答案:

答案 0 :(得分:1)

您是否已将该集合指定为列表类型而非包或套装?如果您确保使用列表映射类型并为列表映射指定索引列,则应该为您处理所有事情。

请参阅docs here,并且还有一些more info here,但第二个是较旧的帖子,因此请注意可能已更改的内容。

这是一个简单的列表集合映射示例:

<list name="Images table="Images">
  <key column="Id"/>
  <index column="Position"/>
  <element type="String" column="FileName"/>
</list>

此示例的流畅映射如下所示:

HasMany(x => x.Images).AsList(x => x.WithColumn("Position"));