1

典型的なマスター/詳細関係で関連付けられている 2 つの CodeFluentEntities コレクションがあります: 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 に答える