2

llblgen 2.6 を使用するアプリケーションを継承しました。AppointmentType プロパティ (n:1 関係) を持つ PersonAppointmentType エンティティがあります。ここで、AppointmentType の名前で PersonAppointmentTypes のコレクションを並べ替えたいと思います。これまでPage_Loadでこれを試しました:

    if (!Page.IsPostBack)
    {
        var p = new PrefetchPath(EntityType.PersonAppointmentTypeEntity);
        p.Add(PersonAppointmentTypeEntity.PrefetchPathAppointmentType);

        dsItems.PrefetchPathToUse = p;
        // dsItems.SorterToUse = new SortExpression(new SortClause(PersonAppointmentTypeFields.StartDate, SortOperator.Ascending));  // This works
        dsItems.SorterToUse = new SortExpression(new SortClause(AppointmentTypeFields.Name, SortOperator.Ascending));
    }

私はおそらくそれを取得していません。

編集: フィルは私を正しい軌道に乗せました、これはうまくいきます:

    if (!Page.IsPostBack)
    {
        dsItems.RelationsToUse = new RelationCollection(PersonAppointmentTypeEntity.Relations.AppointmentTypeEntityUsingAppointmentTypeId);
        dsItems.SorterToUse = new SortExpression(new SortClause(AppointmentTypeFields.Name, SortOperator.Ascending));
    }
4

1 に答える 1

3

正確な解決策が必要な場合は、より多くのコードを共有する必要があります。実際にエンティティ(またはコレクション)を取得するコードを投稿しませんでした。これは関連性がないように見えるかもしれませんが、関連するエンティティを最初にソートまたはフィルタリングしようとするときに、人々がプリフェッチ パスで犯すよくある間違いを犯していると推測しているため、(おそらく) 関連性があると思われます。

PersonAppointmentType (PAT) から AppointType (AT) へのプリフェッチ パスがあります。これは基本的に、PAT を 1 つのクエリとして取得し、そのクエリが完了した後、PAT クエリの結果に基づいて AT を取得するようにフレームワークに指示します。LLBLGen はこれらすべてを処理し、クエリが完了するとオブジェクトを結び付けます。

あなたがやろうとしているのは、2番目のクエリでフェッチしているエンティティで最初のクエリをソートすることです. SQL 用語で考えると、最初のクエリで PAT=>AT からの結合が必要です。これを実現するには、RelationPredicateBucket を介して関係 (結合) を追加し、それをフェッチ呼び出しの一部として渡す必要があります。

最初は直感に反するように思えるかもしれませんが、リレーションとプリフェッチ パスはまったく無関係です (ただし、一緒に使用することはできます)。プリフェッチ パスがまったく必要ない場合もあります。フェッチ コードに追加された関係句と並べ替え句のみが必要な場合があります (実際にグラフに ATエンティティが必要かどうかと、そのフィールドで並べ替える機能によって異なります)。

Prefetch Paths とそれらがどのようにここにあったかについての非常に良い説明があります:

http://www.llblgening.com/archive/2009/10/prefetchpaths-in-depth/

フェッチ コードの残りの部分を投稿してください。より正確な回答を提供できる可能性があります。

于 2011-06-28T19:08:53.893 に答える