2016-12-14 97 views
0

我已經按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(); 
+4

看起來你的變量是字符串。將'UniqueIdentificationNo'轉換爲整數 –

+0

UniqueIdentificationNo的數據類型是什麼? – Ajay2707

+0

Its varchar(100) –

回答

0

在SQLSERVER你需要象下面這樣修改訂單。

SELECT [UNIQUEIDENTIFICATIONNO] 
FROM product 
ORDER BY CONVERT(INT, RIGHT([UNIQUEIDENTIFICATIONNO], 
       Len([UNIQUEIDENTIFICATIONNO]) - Charindex('-', [UNIQUEIDENTIFICATIONNO]))) DESC 
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(); 
+0

其實體框架無法提取所有記錄。 –

0

如果所有數據以同樣的方式(PK -)開始,你可以做如下。

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