You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server指定排序规则在C#中不支持的非EF Core解决办法咨询

解决System.Data.SqlClient不支持German_PhoneBook_CI_AI排序规则的问题

以下是几种无需EF Core的代码层面解决方案:

1. 利用服务器默认排序规则省略显式COLLATE指定

如果USERS表的ID列本身使用服务器默认的German_PhoneBook_CI_AI排序规则,直接移除查询中的COLLATE子句即可,服务器会自动用默认规则排序:

private const string SQLUSERS= @"SELECT * FROM USERS ORDER BY ID;";

若ID列排序规则与服务器不同,可通过子查询在服务器端完成排序,客户端仅读取排序后的结果:

private const string SQLUSERS= @"
    SELECT * 
    FROM (
        SELECT * 
        FROM USERS 
        ORDER BY ID COLLATE German_PhoneBook_CI_AI
    ) AS SortedUsers";

2. 替换为Microsoft.Data.SqlClient驱动

Microsoft.Data.SqlClient是System.Data.SqlClient的后续版本,支持更多SQL Server排序规则,包括German_PhoneBook_CI_AI:

  • 安装NuGet包:Microsoft.Data.SqlClient
  • 替换代码中的命名空间引用,将using System.Data.SqlClient;改为using Microsoft.Data.SqlClient;
  • 原有代码逻辑无需大幅修改,驱动会自动处理该排序规则

3. 转换字段为客户端支持的排序规则(谨慎使用)

若上述方案不可行,可在查询中将ID字段转换为客户端支持的排序规则(如SQL_Latin1_General_CP1_CI_AS)后排序,注意此方法可能改变排序结果的准确性,需验证符合业务需求:

private const string SQLUSERS= @"SELECT * FROM USERS ORDER BY CONVERT(NVARCHAR(MAX), ID) COLLATE SQL_Latin1_General_CP1_CI_AS;";

内容的提问来源于stack exchange,提问作者avdeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:00:08