2016-12-14 2 views
0

Я отсортировал набор записей в порядке desc вместо того, чтобы получить PK-10 сверху. Я получаю PK-9, почему это так, даже если вы удалите префикс и отсортируете его возвращаемый 9. Просьба предложить решение в SQL-сервере или 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

Его 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

Его структура Entity не может вытащить все записи. –

0

Если все данные начинается таким же образом (PK -), вы можете сделать следующее.

SELECT 
    UNIQUEIDENTIFICATIONNO 
FROM 
    product 
ORDER BY 
    RIGHT(UNIQUEIDENTIFICATIONNO, LEN(UNIQUEIDENTIFICATIONNO) - 4) * 1 
Смежные вопросы