2

私はデータセットの大ファンではないので、POCO を使用してデータを返します。ページサイズで動作し、一度に完全な POCO コレクションのセットを提供する POCO タイプ用に作成したカスタムメソッドを使用して、ページングと並べ替えを実現しました。クリックされた DataItem の名前をチェックし、並べ替え順序をそのようにします。Gridview のような ASP.net データ コントロールで使用する予定のすべての POCO に対して、このようなメソッドを何度も作成するのは非常に面倒です。

DataTable を使用しているかのように機能するように、新しい POCO に対して毎回そのようなメソッドを作成する必要がないように、これを自動化する手法はありますか? 必要に応じて、さらに説明を提供できます。

注: POCO を DTO と呼ぶ人もいます。

編集:このトピックに関するこの記事を見つけました。これは私がやろうとしていることを達成する唯一の可能な方法ですか??

4

2 に答える 2

3

これにより、すべての重複コードが保存されるため、基本クラスのアイデアに同意します。この方向への一歩を踏み出すために私が行ったことの 1 つは、(DTO/POCO の) 汎用リストの並べ替えを処理するクラスを作成することです。これにより、プレゼンターまたはコード ビハインドで 1 行のコードだけでリストを並べ替えることができました。

通常、SortExpression では、並べ替えたい DTO のプロパティ名を返します。さらに、SortDirection は単純な「昇順」または「降順」になります。

List<Supplier> SupplierList = mSupplierService.GetSuppliers();
SupplierList.Sort(new GenericComparer<Supplier>(mView.SortExpression, mView.SortDirection));
mView.Suppliers = SupplierList;

これが私が使用したクラスです

public class GenericComparer<T> : IComparer<T>
 {

     private string mDirection;
     private string mExpression;

     public GenericComparer(string Expression, string Direction)
     {
         mExpression = Expression;
         mDirection = Direction;
     }

     public int Compare(T x, T y)
     {
         PropertyInfo propertyInfo = typeof(T).GetProperty(mExpression);
         IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
         IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
         if (mDirection == "Ascending") {
             return obj1.CompareTo(obj2);
         }
         else {
             return obj2.CompareTo(obj1);
         }
     }
 }
于 2009-01-07T19:47:24.130 に答える
0

エンティティ基本クラスを作成しました。私のDAOはそれから派生し、テーブルの列に対応するプロパティを持っています(ほとんどの場合)。私の DAL は、任意のクエリに対して List を返し、それは GridView にバインド可能です。

于 2009-01-07T19:33:16.733 に答える