Además de la respuesta de gbn, puede hacer que se comporten de la misma manera utilizando CompareOptions.StringSort en C# (o usando StringComparison.Ordinal). Esto trata los símbolos que ocurren antes de los símbolos alfanuméricos, así que "-" < "0".
Sin embargo, Unicode vs ASCII no explica nada, ya que los códigos hexadecimales para la página de códigos ASCII se traducen literalmente a la página de códigos Unicode: "-" es 002D (45) mientras que "0" es 0030 (48).
Lo que está sucediendo es que .NET está utilizando la clasificación "lingüística" de forma predeterminada, que se basa en un orden no ordinario y el peso aplicado a varios símbolos por la cultura especificada o actual. Este algoritmo lingüístico permite, por ejemplo, "currículum" (deletreado con acentos) aparecer inmediatamente después de "reanudar" (deletreado sin acentos) en una lista ordenada de palabras, ya que "é" recibe un orden fraccionario justo después de "e" y mucho antes de "f". También permite que la "cooperación" y la "cooperación" se coloquen juntas, dado que el símbolo del tablero tiene un bajo "peso"; solo importa como desempate final absoluto cuando se ordenan palabras como "bits", "bit" y "bit-shift" (que aparecerían en ese orden).
La llamada clasificación ordinal (estrictamente según los valores Unicode, con o sin insensibilidad de mayúsculas y minúsculas) producirá resultados muy diferentes ya veces ilógicos, ya que las variantes de letras suelen aparecer bastante después del alfabeto latino básico sin decorar en ordinales ASCII/Unicode. mientras que los símbolos ocurren antes que él. Por ejemplo, "é" viene después de "z" y entonces las palabras "currículum", "colofón", "rublo", "currículum vitae" se ordenarán en ese orden. "Bit's", "Bit-shift", "Biter", "Bits" se ordenarán en ese orden cuando el apóstrofo llegue primero, seguido por el guión, luego la letra "e", luego la letra "s". Ninguno de estos parece lógico desde una perspectiva de "lenguaje natural".
¿Eres responsable de la distinción entre mayúsculas y minúsculas? –
Los casos son iguales. La diferencia es cómo cada uno trata el '0' a '-'. –
Esto es un problema Unicode, creo. Editar: Quizás no. Para mí, el código de SQL Server devuelve 'Greater than'. ¿Cuál es la intercalación predeterminada en la base de datos en la que lo está probando? –