c# - LINQ-to-SQL orderby 问题

标签 c# linq linq-to-sql

我有一个 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/

相关文章:

c# - 程序在 FtpWebResponse 上挂起

c# - Linq投影问题

c# - Linq OrderBy 不对原始集合进行排序吗?

sql - 我可以在 ASP.net MVC 中使用纯 SQL 吗?

c# - Entity Framework linq 到 sql 转换问题

c# - 为什么 INotifyPropertyChanged 的​​ SetProperty() 方法需要一个 ref 参数?

c# - System.Dynamic 错误?

c# - 无法将数据更新到 SQL 表中

c# - TransactionScope 与 LINQ to SQL 中的事务

c# - 如何在 IQueryable 对象的 LINQ 查询的 where 子句中调用方法