CodeFluent相关集合排序

时间:2016-04-25 23:03:23

标签: sorting codefluent

我有两个与典型主/明细关系相关的CodeFluentEntities集合:发票和发票详细信息。

虽然我可以按发票号码按顺序加载发票收款,但我无法弄清楚如何通过发票按顺序加载相关的发票明细集合行号。

这适用于按所需顺序检索发票:

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 个答案:

答案 0 :(得分:1)

CodeFluent实体提供了几种处理集合排序的选项:

  • 静态排序:使用CFQL方法在SQL中对集合进行排序。如果需要,您还可以覆盖LoadBy ...()方法。但是,创建一个名为LoadBy ... OrderedBySomething()的CFQL方法可能更好。
  • 动态排序:根据排序参数在SQL中对集合进行排序。
  • 客户端排序:使用可根据需要覆盖的Sort方法。

所有这些选项都记录在此处: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;
    }
}