gpt4 book ai didi

sql-server - 如何在 .NET 中进行与 SQL Server 排序规则相同的排序?

转载 作者:行者123 更新时间:2023-12-02 16:33:13 25 4
gpt4 key购买 nike

我一直在针对一些现有的存​​储过程进行一些 TDD。它们返回 XML,因此我一直在使用 LINQ to XML。

目前,我正在进行一项测试,以证明数据已正确排序。该测试浏览 XML,并创建一个匿名类型的 IEnumerable,其中包含应排序的三列。由此,它通过对第一个 IEnumerable 进行排序来创建第二个 IEnumerable:

var sortedColumns = from g in columns
orderby g.ColumnA ascending,
g.ColumnB ascending,
g.ColumnC ascending
select g;

最后,它断言已排序的列与使用 SequenceEquals 的未排序的列相同。

当数据库排序规则与当前排序规则不同时,就会出现问题。特别是,.NET 将 ColumnB 中的“W-”放在“Wa”之前。

有没有办法按照与任意 SQL Server 排序规则相同的顺序进行排序?如果不是,那么我将如何按照与 SQL_Latin1_General_CP1_CI_AS 相同的顺序进行排序?

最佳答案

如果是 Windows 排序规则,则归结为设置适当的区域设置和排序顺序,如 Sort Order Identifiers 中所示。 ,在 .Net 世界中遵循当前设置的 UI 文化。

如果是 SQL 排序规则,则有点复杂。如果你使用 VARCHAR 你就失去了锁定。对于 NVARCHAR,还有一些希望。请参阅Comparing SQL collations to Windows collations :

A SQL collation's rules for sorting non-Unicode data are incompatible with any sort routine that is provided by the Microsoft Windows operating system; however, the sorting of Unicode data is compatible with a particular version of the Windows sorting rules. Because the comparison rules for non-Unicode and Unicode data are different, when you use a SQL collation you might see different results for comparisons of the same characters, depending on the underlying data type. For example, if you are using the SQL collation "SQL_Latin1_General_CP1_CI_AS", the non-Unicode string 'a-c' is less than the string 'ab' because the hyphen ("-") is sorted as a separate character that comes before "b". However, if you convert these strings to Unicode and you perform the same comparison, the Unicode string N'a-c' is considered to be greater than N'ab' because the Unicode sorting rules use a "word sort" that ignores the hyphen.

出于您的目的(TDD),我建议您远离可疑字符,例如连字符 - ,或有两个 s一个接一个(德国党卫军问题),或大写I (土耳其科利顿问题),sh (西类牙语排序问题)等等等等...坚持正确排序的一小部分字符,例如 a,A,b,B 。我是认真的。

关于sql-server - 如何在 .NET 中进行与 SQL Server 排序规则相同的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com