1

我有两个 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]

4

1 回答 1

1

CodeFluent Entities 提供了几个选项来处理集合排序:

  • 静态排序:使用 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;
    }
}
于 2016-04-26T08:22:44.260 回答