0

これは基本的な質問かもしれませんが、System.Data.SqlClient は SQL Server のみに固有のものですか?

System.Data.SqlClient.SortOrder をリポジトリ インターフェイス IRepository.Find() のメソッド パラメータとして使用したいのですが、SQL Server 固有の引数は使用したくありません。SortOrder 列挙型のベンダー中立バージョンはありますか?

今のところ、「asc」または「desc」の値を取るか、独自の列挙型を作成する、sortOrder という文字列パラメータを使用しています。

問題のメソッドの実装は次のとおりです。

public ICollection<T> Find(Expression<Func<T, bool>> predicate, int pageNumber, int size, Expression<Func<T, object>> orderBy, string sortOrder, out int count, params Expression<Func<T, object>>[] fetchSelectors)
{
    count = (this.DbSet as IQueryable<T>).Count(predicate);

    if (size < 1 || size > count)
    {
        throw new ArgumentOutOfRangeException("size");
    }

    var maxPageNumber = (count + size - 1) / size;
    if (pageNumber < 1 || pageNumber > maxPageNumber)
    {
        throw new ArgumentOutOfRangeException("pageNumber");
    }
    if (sortOrder != "asc" && sortOrder != "desc")
    {
        throw new ArgumentException("sortOrder");
    }

    var skipCount = pageNumber * size;
    var query = BuildQuery(predicate, fetchSelectors);
    query = sortOrder == "asc" ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
    return query.Skip(skipCount).Take(size).ToList();
}
4

4 に答える 4

2

これは SQL Server 固有のものです。

Find一般に、メソッドでソート順を使用しないことをお勧めします。代わりに、OrderBy()LINQOrderByDescending()IQueryable<T>. さらに、実装IQueryable<T>がオプションである場合、それが私の最初の選択肢になります。ライブラリのユーザーが長年にわたって LINQ を使用して蓄積してきた知識に「便乗」することができます。

于 2012-05-17T19:04:42.480 に答える
2

MSDNから、はい、これは SQL Server 固有です。

System.Data.SqlClient 名前空間は、SQL Server 用の .NET Framework データ プロバイダーです。

セマンティクス (ASC/DESC) は一般的ですが、照合はプロバイダー固有である可能性があります。

于 2012-05-17T19:01:45.687 に答える
1

はい、SQL Server のみに固有です。次のような独自の列挙を簡単に作成できます。

enum SortOrder
{
    Ascending,
    Descending
};
于 2012-05-17T19:02:12.163 に答える
0

使用できますSystem.ComponentModel.ListSortDirection

于 2012-05-17T19:01:53.480 に答える