我试图在用C#编写的.Net应用程序中按名称对产品列表进行排序,以获得通过以下命令从SQL Server数据库获得的相同列表: 从ProductName按产品订单中选择*
不幸的是,应用程序排序的行为与数据库排序不同。它可能与排序规则有关:数据库具有SQL_Latin1_General_CP1_CI_AS排序规则。
如何使应用程序对这些字符串进行排序,就像数据库一样?
感谢。
更新:通过使用下面评论中的代码,并将比较选项更改为Ordinal,我终于获得了良好的结果:
私有CompareOptions myOptions = CompareOptions.Ordinal;
此外,此链接包含一些与SQL排序规则相关的非常有用的信息:http://www.siao2.com/2005/11/08/490305.aspx
感谢。它还没有用,但这可能是正确的方向。 这是我现在正在尝试的代码:
((List)orderDetails).Sort(new OrderDetailComparer());
其中OrderDetailComparer是:
public class OrderDetailComparer : IComparer<OrderDetail>
{
private CompareInfo myComp = CompareInfo.GetCompareInfo("en-US");
private CompareOptions myOptions = CompareOptions.StringSort;
public int Compare(OrderDetail a, OrderDetail b)
{
if (a == b) return 0;
if (a == null) return -1;
if (b == null) return 1;
return myComp.Compare ( a.Product.ProductNameForSorting, b.Product.ProductNameForSorting, myOptions );
}
}
仍然没有结果。
你怎么看?如何从数据库中获取信息,了解我应该使用哪种文化?感谢。
答案 0 :(得分:4)
您可能需要使用您希望排序的文化。查看StringComparer的示例: http://msdn.microsoft.com/en-us/library/system.stringcomparer.currentculture.aspx