使用NHibernate 1按嵌套对象的属性排序对象列表

时间:2012-01-23 13:03:45

标签: nhibernate object properties nested

我有一个带有嵌套对象的对象,并希望通过嵌套对象的属性来排序对象列表。我必须使用旧的NHibernate版本(1.0或其他)。

public class MyObject
{
  public NestedObject
  { Get; Set; }
}

public class NestedObject
{
  public string Name
  { Get; Set; }
}

public List<MyObject> GetOrderedByNameOfNestedObject()
    {
        ISession session = SessionProvider.GetCurrentSession();

        List<MyObject> objects = new List<MyObject>();

        ICriteria criteria = session.CreateCriteria(typeof(MyObject));

        criteria.AddOrder(new NHibernate.Expression.Order("NestedObject.Name", true));

        ..

        return objects;
    }

我收到错误

could not resolve property:NestedObject.Name of :MyObject

我很确定在较新的NHibernate版本中这是可能的,但也不知道旧的版本。我可以用HQL来解决这个问题,但我想避免使用它。

更新

我也试图插入

criteria.CreateAlias("NestedObject", "n");
criteria.AddOrder(new NHibernate.Expression.Order("n.Name", true));

没有成功。

我的NHibernate版本是1.0.2。

堆栈跟踪

at NHibernate.Persister.AbstractPropertyMapping.ToColumns(String alias,String propertyName)    at NHibernate.Expression.AbstractCriterion.GetColumns(ISessionFactoryImplementor factory,Type persistentClass,String property,String alias,IDictionary aliasClasses)    在NHibernate.Expression.Order.ToSqlString(ISessionFactoryImplementor sessionFactory,Type persistentClass,String alias)    在NHibernate.Loader.CriteriaLoader..ctor(IOuterJoinLoadable persister,ISessionFactoryImplementor工厂,CriteriaImpl标准)    在NHibernate.Impl.SessionImpl.Find(CriteriaImpl标准)    在NHibernate.Impl.CriteriaImpl.List()    位于C:\ Users \ jan-frederik.carl \ Documents \ Visual Studio 2005 \ Projects \ HRE \ DirectLink \ Persistence \ Repositories中的DirectLink.Persistence.Repositories.ProcessRepository.GetAllByReportingTimeIdKeyFigureTypeGroup(Int32 reportingTimeId,String keyFigureTypeGroup,String orderCategory,Boolean ascending) \ ProcessRepository.cs:第62行    位于C:\ Users \ jan-frederik.carl \ Documents \ Visual Studio 2005 \ Projects \ HRE \ DirectLink \ DirectLink_Web \ Applications \ Summit \ Summit_Interface2.aspx中的DirectLink.Applications.Summit.Summit_Interface2.EntriesGrid_Sorting(Object sender,GridViewSortEventArgs e) .cs:第131行    在System.Web.UI.WebControls.GridView.OnSorting(GridViewSortEventArgs e)    在System.Web.UI.WebControls.GridView.HandleSort(String sortExpression,SortDirection sortDirection)    在System.Web.UI.WebControls.GridView.HandleSort(String sortExpression)    在System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)    在System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument)    在System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)    在System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)    在System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)    在System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

1 个答案:

答案 0 :(得分:0)

您需要使用CreateAlias来访问关联。

The docs不能伤害。