Сортировка коллекций, связанных с CodeFluent
У меня есть две коллекции CodeFluentEntities, которые связаны в типичном отношении Master/Detail: Invoices и Invoice details.
Хотя я могу загружать коллекцию счетов-фактур по порядку по номеру счета-фактуры, я не могу понять, как получить соответствующую коллекцию деталей счета-фактуры для загрузки по порядку по номерам строк счета-фактуры.
Это работает при получении счета в нужной последовательности:
Dim _page As New CodeFluent.Runtime.PageOptions("[Invoice].[InvoiceNumber]", System.ComponentModel.ListSortDirection.Ascending)
Dim _orders as Accounting.AR.OrderCollection.PageLoadAll(0, -1, _page)
OrderCollectionBindingSource.DataSource = _orders
InvoiceDetail
Коллекция загружается в случайном порядке. То, что я хотел бы сделать, это отсортировать соответствующую коллекцию по [InvoiceDetail].[LineNumber]
1 ответ
CodeFluent Entities предлагает несколько опций для сортировки коллекций:
- Статическая сортировка: коллекция сортируется в SQL с использованием методов CFQL. Вы также можете перезаписать метод LoadBy...(), если вам нужно. Однако, вероятно, лучше создать метод CFQL с именем LoadBy...OrderedBySomething().
- Динамическая сортировка: коллекция сортируется в SQL в зависимости от параметров сортировки.
- Сортировка на стороне клиента: с помощью метода сортировки, который можно переопределить для ваших нужд.
Все эти параметры описаны здесь: http://www.softfluent.com/documentation/?BOM_SP_Sorting.html
В вашем случае вы хотите изменить метод, используемый Orders
свойство для загрузки связанной коллекции заказов. Поэтому вам необходимо создать новый метод CFQL (или заменить существующий) статической сортировкой. Затем вы можете установить этот метод как тот, который будет использоваться с помощью loadMethodName
атрибут:
<cf:entity name="Customer">
<cf:property name="Id" key="true" />
<cf:property name="FullName" />
<!-- loadMethodName -->
<cf:property name="Orders" loadMethodName="LoadByCustomerOrderedByCreationDate" typeName="{0}.OrderCollection" relationPropertyName="Customer" />
</cf:entity>
<cf:entity name="Order">
<cf:property name="Id" key="true" />
<cf:property name="CreationDate" sortable="true" typeName="date" />
<cf:property name="Customer" typeName="{0}.Customer" relationPropertyName="Orders" />
<!-- Static sorting: `ORDER BY ...` -->
<cf:method name="LoadByCustomerOrderedByCreationDate" body="LOAD(Customer) WHERE Customer = @Customer ORDER BY CreationDate" />
</cf:entity>
Orders
свойство это:
public OrderCollection Orders
{
get
{
if (this._orders == null)
{
// code omitted for brevity
this._orders = OrderCollection.LoadByCustomerOrderedByCreationDate(this);
}
return this._orders;
}
}