NHibernate: как отсортировать коллекцию по свойству объекта, на который ссылается

#nhibernate

#nhibernate

Вопрос:

Я хотел бы отсортировать CampaignRetailers по Retailer.Name. Однако Retailer является объектом, на который ссылается CampaignRetailers. Я пробовал order-by="Retailer.Name" . Возможен ли такой вид сортировки?

 <class name="Campaign" table="Campaign">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <set name="CampaignRetailers" table="CampaignRetailers"
       cascade="all-delete-orphan" inverse="true" order-by="Retailer.Name">
    <key column="CampaignId" not-null="true" />
    <one-to-many class="CampaignRetailer" />
  </set>
</class>

<class name="CampaignRetailer" table="CampaignRetailers">
  <id name="Id">
    <generator class="identity"/>
  </id> 
  <many-to-one name="Campaign" column="CampaignId" />
  <many-to-one name="Retailer" column="RetailerId" />
</class>
  

Ответ №1:

Это невозможно.

Вместо этого используйте сортировку adhoc на стороне клиента. Например:

 sortedCampaignRetailers = campaign.CampaignRetailers
                                  .OrderBy(x => x.Retailer.Name);
  

Ответ №2:

Обычно я использую вместо этого и упорядочиваю коллекцию с помощью order-с помощью сопоставления, подобного следующему.

  <bag name="CampaignRetailers" inverse="true" cascade="delete" order-by="Name">
  <key column="CampaignId"/>
  <one-to-many class="CampaignRetailer"/>
</bag>
  

где Name является свойством CampaignRetailers.
У меня это работает.
Я также надеюсь на вас.

Ответ №3:

Для этого должно нормально работать следующее (NH 3.x ):

  var retailers = Session.QueryOver<CampaignRetailer>()
                .JoinQueryOver(x => x.Retailer)
                .OrderBy(x => x.Name).Asc
                .List<CampaignRetailer>();