我有一个表列(Varchar),其中包含以下数据:
COLUMN_NAME
当我在SQL语句中使用OrderBy时,我按以下顺序获取项目:
COLUMN_NAME
如果我查询数据(数据来自WCF)并使用LINQ OrderBy,我按以下顺序获取项目:
的PropertyName
数据“1-2000”似乎在SQL和LINQ中的排序方式不同。
我尝试使用StringComparison.Ordinal
和StringComparison.InvariantCulture
,但它似乎仍无效。
请帮忙!
答案 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);
这给了我预期的结果。