我有一个LINQ查询,我在一个名为CustomerReference的nvarchar字段上排序。问题是,引用以大写字母开头似乎是在没有大写字母的后面,而我需要的是大写字母。例如,如果我有以下行:
d93838
D98484它现在是按这个顺序排列的,但是我需要它倒过来--所以它应该是这样的
D98484
d93838伙计们有什么想法吗?谢谢
发布于 2011-07-26 10:06:07
这将采用after \d+格式,并将b3432放在C1234之前,但在B9999之后
list.OrderBy (l => l.CustomerReference.Substring(0,1).ToLower())
.ThenByDescending(l =>l.CustomerReference.Substring(0,1).ToUpper()==l.CustomerReference.Substring(0,1))
.ThenBy (l =>l.CustomerReference )编辑:我也被要求使用SQL,所以这就是LINQPad所做的
-- Region Parameters
DECLARE @p0 Int SET @p0 = 0
DECLARE @p1 Int SET @p1 = 1
DECLARE @p2 Int SET @p2 = 0
DECLARE @p3 Int SET @p3 = 1
DECLARE @p4 Int SET @p4 = 0
DECLARE @p5 Int SET @p5 = 1
-- EndRegion
SELECT [T0].CustomerReference FROM [dbo].[test] AS [t0]
ORDER BY LOWER(SUBSTRING([t0].[CustomerReference], @p0 + 1, @p1)),
(CASE
WHEN UPPER(SUBSTRING([t0].[CustomerReference], @p2 + 1, @p3)) = SUBSTRING([t0].[CustomerReference], @p4 + 1, @p5) THEN 1
WHEN NOT (UPPER(SUBSTRING([t0].[CustomerReference], @p2 + 1, @p3)) = SUBSTRING([t0].[CustomerReference], @p4 + 1, @p5)) THEN 0
ELSE NULL
END) DESC, [t0].[CustomerReference]发布于 2011-07-26 10:08:44
在大多数实现中,小写是第一位的(尤其是这样,代码点是按顺序排列的)。您将无法让SQL server对其进行更改,因此下一步最好的方法是将其重新排序,并编写一个自定义比较器。请注意,内置的.NET比较器也将根据比较器的不同,将小写视为第一或等于(与其大写等效)。
不过!除非您将自己限制在非常简单的示例(ASCII等)上,否则排序“相似”字符是一个非常重要的练习。即使我们忽略土耳其I/İ/ı/ i,重音字符也会给您带来问题)。
https://stackoverflow.com/questions/6828371
复制相似问题