System.Data.SqlClient 是否特定于 SQL Server

本文关键字:SQL Server Data SqlClient 是否 System | 更新日期: 2023-09-27 18:34:26

这可能是

一个基本问题,但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();
}

System.Data.SqlClient 是否特定于 SQL Server

从MSDN,是的,这是特定于SQL Server的。

命名空间是框架数据提供程序 the.NET 对于 SQL Server。

排序规则可能是特定于提供程序的,尽管语义 (ASC/DESC) 很常见。

它是

特定于SQL Server的。

通常,我建议不要在Find方法中采用排序顺序。相反,我将提供一个单独的OrderBy()OrderByDescending()方法,就像 LINQ 对 IQueryable<T> 所做的那样。此外,如果实现IQueryable<T>是一种选择,那将是我的首选:您将能够"捎带"库用户多年来使用 LINQ 所积累的知识。

是的,它仅适用于 SQL Server。 您可以轻松创建自己的枚举,例如:

enum SortOrder
{
    Ascending,
    Descending
};
您可以使用

System.ComponentModel.ListSortDirection .