2014-12-23 7 views
0

У меня есть столбец с ТипДанных как NVARCHAR (макс) Примеры записей:Max() в LINQ Query

Advisor_Code 
9001 
9002 
9003 
100001 
100001 
9011 

Я попробовал этот запрос:

var code = (from a in db.advisor_Registration select a).Max(a=>a.advisor_Code); 

Он возвращает 9011, но максимальное число 100001. Как исправить это

+1

Ваша колонка должна быть целым числом, а не varchar. – rossisdead

+3

У вас нет номеров, у вас есть строки. '9011 <100001', но' '9011"> "100001" '. Обычным подходом для обработки этого является использование правильного типа данных. Предположительно, у вас есть тип nvarchar, потому что некоторые из ваших кодов не могут быть интерпретированы как числа, но если вы это сделаете, как вы хотите относиться к ним при сравнении? – hvd

+0

@hvd Я понимаю, но есть ли что-то вроде этого: select max (cast (advisor_code as int)) Из таблицы –

ответ

0

Вы можете выполнять только функцию MAX с ожидаемым результатом в числовом поле. nvarchar (max) не является числовым полем. Например, вам придется преобразовать строки в длинную, а затем взять MAX для MAX для работы, как вы ожидаете.

+0

Вы явно можете выполнить max в поле строки. ОП делает это и получает результат. Это не результат, ожидаемый OP. – hvd

+0

Я изменю свой ответ, так что ваш дергающийся палец вниз будет счастлив. – TheGeekYouNeed

+0

Это еще не обязательно полезный ответ. Это будет неудачно, если какая-либо из строк не может быть проанализирована как число. (Вот почему я прокомментировал разъяснение вопроса, а не отправляю ответ, кстати.) – hvd

1

Поскольку один из тегов Я предполагаю, что он должен быть переведен в SQL. Если вы используете, например, Convert.ToInt32 в инструкции LINQ, это не будет выполнено.

Обычный способ получить «числовой» Макс из строк без конверсии на заказ по длине, а затем строки:

var max = myquery.OrderByDescending(x => x.Length) 
       .ThenByDescending (x => x) 
       .First(); 

где myquery может быть любым запросом к DbSet, который возвращает строку. Конечно, результаты будут бессмысленными, если какая-либо из строк не является числовой.

+0

По-прежнему тот же результат 9011 –

+0

У меня есть: var code = db.advisor_Registration.OrderByDescending (x => x.advisor_Code) .ThenByDescending (x => x) .First(); –

+0

Это совсем другое. Посмотрите на часть «Длина». –