对唯一标识号进行排序

时间:2016-12-14 05:10:14

标签: c# sql-server

我按照desc顺序对一组记录进行了排序,而不是将PK-10放在顶部我得到了PK - 9为什么会这样,即使你删除了前缀并对其返回9进行排序。请建议一个解决方案在sql server或C#

UniqueIdentificationNo
PK - 9
PK - 8
PK - 7
PK - 6
PK - 4
PK - 2
PK - 10

SELECT  [UniqueIdentificationNo]
    FROM [Product] order by [UniqueIdentificationNo] desc

C#代码,int.parse返回错误,此代码也返回PK-9

 var lastProduct = DbContext.Products.OrderByDescending(x => int.Parse(
            (x.UniqueIdentificationNo ?? string.Empty).Replace(prefix, string.Empty).Trim())).FirstOrDefault();

3 个答案:

答案 0 :(得分:0)

如果结果列表如下所示:

List<string> UINumber = new List<string>(){ "PK - 9",
                                            "PK - 8",
                                            "PK - 7",
                                            "PK - 6",
                                            "PK - 4",
                                            "PK - 2",
                                            "PK - 10"};

然后您可以使用以下代码按降序对它们进行排序:

var soretedList = UINumber.OrderByDescending(x =>Convert.ToInt16(
                                             x.Substring(x.IndexOf("- ") + 1))
                                            ).ToList();

答案 1 :(得分:0)

在sqlserver中,您需要通过以下方式修改顺序。

SELECT [UNIQUEIDENTIFICATIONNO]
FROM   product
ORDER  BY CONVERT(INT, RIGHT([UNIQUEIDENTIFICATIONNO], 
                Len([UNIQUEIDENTIFICATIONNO]) - Charindex('-', [UNIQUEIDENTIFICATIONNO]))) DESC  

答案 2 :(得分:0)

如果所有数据都以相同的方式(PK -)开始,您可以执行以下操作。

SELECT 
    UNIQUEIDENTIFICATIONNO
FROM 
    product
ORDER BY 
    RIGHT(UNIQUEIDENTIFICATIONNO, LEN(UNIQUEIDENTIFICATIONNO) - 4) * 1