Linq Orderby vs SQL Orderby

时间:2017-02-22 14:57:53

标签: c# asp.net oracle linq

我有一个表列(Varchar),其中包含以下数据:

COLUMN_NAME

  1. 102100
  2. 1-2000
  3. 112100
  4. 当我在SQL语句中使用OrderBy时,我按以下顺序获取项目:

    COLUMN_NAME

    1. 1-2000
    2. 102100
    3. 112100
    4. 如果我查询数据(数据来自WCF)并使用LINQ OrderBy,我按以下顺序获取项目:

      的PropertyName

      1. 102100
      2. 112100
      3. 1-2000
      4. 数据“1-2000”似乎在SQL和LINQ中的排序方式不同。

        我尝试使用StringComparison.OrdinalStringComparison.InvariantCulture,但它似乎仍无效。

        请帮忙!

2 个答案:

答案 0 :(得分:5)

由于您的问题被标记为“Oracle”,我猜您正在将SQL语句发送到Oracle数据库。

Oracle数据库使用的排序在“NLS”设置中定义。此设置的默认值取决于Oracle的安装方式以及主机服务器上的操作系统。

更多信息: https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch5lingsort.htm

来自Oracle的非常详细的白皮书: http://www.oracle.com/technetwork/database/database-technologies/globalization/twp-appdev-linguistic-sorting-10gr2-132064.pdf

提取:

“西班牙传统上将 ch ll 以及ñ视为自己的字母,在 c , l n 。例如,以下西班牙语单词将按列出的方式排序:

cabalmente,caba ll a,cantina,ca ñ a,clamar,curador, ch ácara

最近,这种传统的西班牙语排序实践已经被现代西班牙语排序所取代,它取消了 ch ll 的特殊状态。“

答案 1 :(得分:1)

您可以将linq排序方法与序数StringComparer

一起使用
list.Sort(StringComparer.Ordinal);

这给了我预期的结果。