我有一个带有嵌套对象的对象,并希望通过嵌套对象的属性来排序对象列表。我必须使用旧的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)