2009-03-26 7 views
0

私はちょうど私を殺している問題があります。私のCSLAオブジェクトの1つ(Parentと言う)にはたくさんの子があります(子と呼ぶことがあります - 子のリスト)。親は編集可能なルート(BusinessBase)で、子は編集可能な子リスト(BusinessListBase)で、子は編集可能な子です。Dynamic LINQ&CSLA BusinessListBase

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

理論上、yは、年齢によって降順にソートされた子のコレクションで埋められる必要があります(「Age」はChildオブジェクトのプロパティであると仮定します)。

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

ヘルプ! ジョー

答えて

1

ジョー、

はここで役立つかもしれない手がかりです。編集可能なリストと読み取り専用のリストの違いについてのあなたのコメントは私には好奇心を覚えました。そこで私は少し深く掘りました。

BusinessListBaseはIQueryableを実装しています(実際には "Child"のように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 Issue ID 326 - OrderBy should return a LinqBindingList that works with Bound Grids

私の疑惑は、それが何よりものIQueryableのBusinessListBaseの実装を行うことがより多くを持っていることです。また、ReadOnlyListBaseがIQueryableを直接実装しているか継承を実装しているかのようには見えません(私のCSLA 3.5)。

希望に役立ちます。

Jeff Miller

+0

はい、CSLAのIQueryableの実装にバグがあるようです。私は問題を追跡し、3.6バージョンと比較するコードを実行しようとします。私はまた、3.5バージョンのCSLAを使用しています。 –

関連する問題