2009-06-26 10 views
0

コードの理解に問題があります。私は2つのクラスCompanyとCompanyLocationを持っています。NHibernate Criteriaクエリビルド

 public IList<CompanyLocation> GetCompanyLocations(string sortExpression) 
     { 
      ICriteria criteria = _session.CreateCriteria(typeof(CompanyLocation)); 

      if (!string.IsNullOrEmpty(sortExpression)) 
      { 
       Sort sort = new Sort(sortExpression); 
       if (!string.IsNullOrEmpty(sort.AssociationPath)) 
       { 
        criteria.CreateCriteria(sort.AssociationPath).AddOrder(new Order(sort.SortColumn, sort.IsAscending)); 
       } 
//    if (!string.IsNullOrEmpty(sort.AssociationPath)) 
//    { 
//     criteria.CreateCriteria(sort.AssociationPath); 
//    } 
//    criteria.AddOrder(new Order(sort.SortColumn, sort.IsAscending)); 
      } 
      return criteria.List<CompanyLocation>(); 
     } 

私はメソッドを呼び出すと、「Company.CompanyName DESC」ソートクラスのsortExpressionに渡す:私は次のように基準のクエリを使用してクエリを実行しようとしている

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="Core.DataTransfer.CompanyLocation,Core.DataTransfer" table="`CompanyLocation`" lazy="true"> 
    <id name="CompanyLocationId" column="`CompanyLocationID`" type="int"> 
     <generator class="native" /> 
    </id> 
    <many-to-one name="Company" cascade="none" column="`CompanyID`" not-null="true" /> 
    </class> 
</hibernate-mapping> 

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="Core.DataTransfer.Company,Core.DataTransfer" table="`Company`" lazy="true"> 
    <id name="CompanyId" column="`CompanyID`" type="int"> 
     <generator class="native" /> 
    </id> 
    <property type="string" not-null="true" length="100" name="CompanyName" column="`CompanyName`" /> 
    <bag name="CompanyLocations" inverse="true" lazy="true" cascade="all"> 
     <key column="`CompanyID`" /> 
     <one-to-many class="Core.DataTransfer.CompanyLocation,Core.DataTransfer" /> 
    </bag> 
    </class> 
</hibernate-mapping> 

:としてマッピングようにそれを解析します:ザ・

偽= AssociationPath =「会社」 SortColumn =「会社名」 IsAscendingかの作品をコメントアウトされていない方法でブロック。コメントアウトされたものに変更すると、以下のエラーが表示されます。 プロパティを解決できませんでした:CompanyName

理由を理解できません。

答えて

3

たいていのcreateCriteriaは、()(代わりにあなたのコードが期待するように、元の1つを変更する)新しい基準を作成するため

if (!string.IsNullOrEmpty(sort.AssociationPath)) 
{ 
    var criteriaCopy = criteria.CreateCriteria(sort.AssociationPath); 
} 
criteriaCopy.AddOrder(new Order(sort.SortColumn, sort.IsAscending)); 

あるいは単なる

if (!string.IsNullOrEmpty(sort.AssociationPath)) 
{ 
    criteria = criteria.CreateCriteria(sort.AssociationPath); 
} 
criteria.AddOrder(new Order(sort.SortColumn, sort.IsAscending)); 
に変更してみてください
関連する問題