Zusätzlich zu der Antwort von gbn können Sie sie mithilfe von CompareOptions.StringSort in C# gleich verhalten (oder mithilfe von StringComparison.Ordinal). Dies behandelt Symbole so, dass sie vor alphanumerischen Symbolen auftreten, also "-" < "0".
Unicode vs ASCII erklärt jedoch nichts, da die Hexadezimalcodes für die ASCII-Codepage wortwörtlich in die Unicode-Codepage übersetzt werden: "-" ist 002D (45), während "0" 0030 (48) ist.
Was passiert, ist, dass .NET standardmäßig "linguistisches" Sortieren verwendet, das auf einer nicht-ordinalen Ordnung und Gewichtung basiert, die von der angegebenen oder aktuellen Kultur auf verschiedene Symbole angewendet wird. Dieser linguistische Algorithmus erlaubt es beispielsweise, "résumé" (buchstabiert mit Akzenten) unmittelbar nach "resume" (buchstabiert ohne Akzente) in einer sortierten Liste von Wörtern zu erscheinen, da "é" eine gebrochene Ordnung unmittelbar nach "e" und erhält lange vor "f". Es erlaubt auch, dass "Zusammenarbeit" und "Zusammenarbeit" eng zusammengefügt werden, da das Strichsymbol ein niedriges "Gewicht" erhält; es ist nur als der absolute letzte Tiebreaker beim Sortieren von Wörtern wie "Bits", "Bit's" und "Bit-Shift" (die in dieser Reihenfolge erscheinen würden) relevant.
Sogenannte ordinale Sortierung (streng nach Unicode-Werten, mit oder ohne Berücksichtigung der Groß-/Kleinschreibung) führt zu sehr unterschiedlichen und manchmal unlogischen Ergebnissen, da Buchstabenvarianten in ASCII/Unicode-Ordinalzahlen normalerweise deutlich hinter dem einfachen undekorierten lateinischen Alphabet erscheinen. während Symbole davor auftreten. Zum Beispiel kommt "é" hinter "z" und so würden die Wörter "resume", "rosin", "Rubel", "resumé" in dieser Reihenfolge sortiert. "Bits", "Bit-Shift", "Biter", "Bits" werden in dieser Reihenfolge sortiert, wenn der Apostroph zuerst kommt, gefolgt vom Bindestrich, dann der Buchstabe "e", dann der Buchstabe "s". Keiner von diesen scheint logisch aus einer "natürlichen Sprache" Perspektive.
Berücksichtigen Sie die Groß- und Kleinschreibung? –
Die Fälle sind gleich. Der Unterschied ist, wie jeder die '0' mit '-' behandelt. –
Dies ist ein Unicode-Problem, denke ich. Edit: Vielleicht nicht. Für mich gibt der SQL Server-Code 'Greater than' zurück. Wie lautet die Standardsortierung in der Datenbank, in der Sie sie testen? –