ASP.netデータコントロールでPOCOを使用する場合の並べ替え/ページ機能の実装
-
05-07-2019 - |
質問
私はデータセットの大ファンではないため、POCOを使用してデータを返します。ページサイズで動作するPOCOタイプ用に作成したカスタムメソッドを使用してページングとソートを実現し、一度に完全なPOCOコレクションのセットを提供します。クリックしたDataItemの名前をチェックし、ソート順を確認するメソッドを使用しますその並べ替えを行います。 GridviewのようなASP.netデータコントロールで使用する予定のすべてのPOCOに対して、このようなメソッドを何度も作成するのは非常に苦痛です。
DataTableを使用しているかのように動作するように、新しいPOCOのたびにそのようなメソッドを作成する必要がないように、これを自動化する手法はありますか?必要に応じて、さらに説明できます。
注:一部の人々は、POCOをDTOとして呼び出す場合があります。
編集:このトピックに関する記事を見つけました。これは私がやろうとしていることを達成する唯一の方法ですか?
解決
これによりすべての重複コードが保存されるため、基本クラスの考え方に同意します。私がこの方向に一歩踏み込んだことの1つは、汎用リスト(DTO / POCO用)のソートを処理するクラスを作成することです。これにより、プレゼンターまたはコードビハインドのリストを1行のコードで並べ替えることができました。
通常、SortExpressionの場合、ソートするDTOのプロパティ名を返します。さらに、SortDirectionは単純な「昇順」になります。または" Decending"
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);
}
}
}
他のヒント
Entity基本クラスを作成しました。私のDAOはそれから派生し、テーブル列に対応するプロパティを持っています(ほとんどの場合)。私のDALは、クエリに対してListを返し、GridViewにバインドできます。