これは基本的な質問かもしれませんが、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();
}