0

私はただ私を殺している問題を抱えています。私のCSLAオブジェクトの1つ(親としましょう)には多くの子があります(子と呼びましょう-子のリスト)。親は編集可能なルート (BusinessBase)、子は編集可能な子リスト (BusinessListBase)、子は編集可能な子です。

私がやろうとしているのは、これを行うことです: Parent x = Parent.GetParent(id); IQueryable y = Parent.MyChildren.OrderBy("Age DESC");

理論的には、y は、年齢の降順で並べ替えられた子のコレクションで満たされる必要があります ("Age" が Child オブジェクトのプロパティであると仮定します)。

しかし、私が得たのは y.Count() = 0 です。ただし、Parent.MyChildren.Count() を実行しても 0 ではありません。これは動的 LINQ または CSLA のバグですか? これ(エラー)は、読み取り専用リストでは発生しません。

ヘルプ!ジョー

4

1 に答える 1

1

ジョー、

ここに役立つかもしれない手がかりがあります。編集可能なリストと読み取り専用リストの違いに関するあなたのコメントに興味をそそられたので、もう少し掘り下げました。

CSLA 3.5 コードを掘り下げてわかったことに基づいて、BusinessListBase は IQueryable を実装します (実際には、「子」のように、CSLA コードでは「C」です)。ReadOnlyListBase クラスにはありません。

これは、どの Dynamic LINQ OrderBy 拡張メソッドが呼び出されているかに影響を与える可能性があり (2 つ存在します)、IQueryable 用のものは、通常の IQueryable 用の OrderBy のバージョンを呼び出すだけです。

一方、BusinessListBase の IQueryable の跡をたどると、(IQueryProvider 型の) Provider プロパティは CslaQueryProvider に委任されます。

public IQueryProvider Provider
{
  get {
    return new Linq.CslaQueryProvider<T, C>(this);
  }
}

そうは言っても、私が費やさなければならなかった限られた時間で、CSLA LINQ の内容を (デバッガーを使って) さらに掘り下げることはおそらく保証されていると思います。他のディスカッションやフォローアップから、CSLA で記録されたバグ/問題も指摘されていることがわかりました。リンクは次のとおりです。

CSLA 問題 ID 326 - OrderBy はバインドされたグリッドで動作する LinqBindingList を返す必要があります

私の疑いでは、BusinessListBase の IQueryable の実装が他の何よりも関係しているということです。繰り返しになりますが、ReadOnlyListBase が直接または継承を介して IQueryable を実装しているようには見えません (CSLA 3.5 の私のコピーでは)。

それが役立つことを願っています。

ジェフ・ミラー

于 2009-03-27T14:05:44.460 に答える