【问题标题】:Is System.Data.SqlClient Specific to SQL Server Only?System.Data.SqlClient 是否仅特定于 SQL Server?
【发布时间】:2012-05-18 03:19:44
【问题描述】:

这可能是一个基本问题,但 System.Data.SqlClient 是否仅特定于 SQL Server?

我想使用 System.Data.SqlClient.SortOrder 作为我的存储库接口 IRepository.Find() 的方法参数,但不想使用 SQL Server 特定的参数。 是否有供应商中立版本的 SortOrder 枚举?

现在,我只是使用一个名为 sortOrder 的字符串参数,它只接受值“asc”或“desc”,或者只是创建我自己的枚举。

这里是有问题的方法的实现:

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();
}

【问题讨论】:

    标签: c# sql-server repository-pattern


    【解决方案1】:

    来自MSDN,是的,这是特定于 SQL Server 的。

    System.Data.SqlClient 命名空间是 .NET Framework 数据提供程序 用于 SQL Server。

    虽然语义 (ASC/DESC) 很常见,但排序规则可能是特定于提供者的。

    【讨论】:

      【解决方案2】:

      它是 SQL Server 特定的。

      一般来说,我建议不要在Find 方法中采用排序顺序。相反,我会提供一个单独的OrderBy()OrderByDescending() 方法,就像LINQ 对IQueryable&lt;T&gt; 所做的那样。此外,如果实现IQueryable&lt;T&gt; 是一种选择,那将是我的首选:您将能够“搭载”您的库用户多年来使用 LINQ 积累的知识。

      【讨论】:

        【解决方案3】:

        是的,它仅特定于 SQL Server。您可以轻松地进行自己的枚举,例如:

        enum SortOrder
        {
            Ascending,
            Descending
        };
        

        【讨论】:

          【解决方案4】:

          您可以使用System.ComponentModel.ListSortDirection

          【讨论】:

            猜你喜欢
            • 2011-04-12
            • 2019-12-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-10
            • 2010-09-30
            • 2019-08-16
            • 1970-01-01
            相关资源
            最近更新 更多