代码之家  ›  专栏  ›  技术社区  ›  Brian

Nhibernate查询中链接集合的排序

  •  0
  • Brian  · 技术社区  · 17 年前

    这部分与 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>();
    

    Correcly使用ORDER BY生成一个select,但是链接集合中的结果没有排序。

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

    更新: 正如Steve所建议的,这个问题可以通过在映射中硬编码order属性来解决,比如:

    HasMany(x => x.PartialViews).KeyColumnNames.Add("PageId").AsBag().SetAttribute("order-by", "ColumnNumber");
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Steve Willcock    17 年前

    您是否将集合指定为列表类型而不是包或集合?如果确保使用列表映射类型并为列表映射指定索引列,则应为您处理所有问题。

    docs here ,还有一些 more info here 另外,虽然第二个是一个老职位,所以要注意可能已经改变的事情。

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

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

    本例的fluent映射如下:

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