我有一个 LINQ-to-SQL 查询,并且对名为 CustomerReference 的 nvarchar 字段进行排序。问题是,以大写字母开头的引用文献似乎在没有大写字母的引用文献之后,而我需要相反的方式。例如,如果我有以下行:
d93838
D98484
目前它是按该顺序排序的,但是我需要将其颠倒过来 - 所以它会像这样
D98484
d93838
大家有什么想法吗?谢谢
最佳答案
这假定格式为 [A-Za-z]\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]
关于c# - LINQ-to-SQL orderby 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828371/