2013-07-17 2 views
0

У меня есть столбец Code типа varchar в базе данных, который включает только цифры. Я использую метод ниже, чтобы получить следующий код, и он работает нормально. Но я предпочитаю, чтобы все вычисления и преобразования типов выполнялись на стороне SQL, чтобы иметь меньше накладных расходов. Используя приведенный ниже код, я извлекаю все данные, которые не нужны. Любые идеи действительно оценены.используя запрос LINQ для получения max столбца varchar

public string GetNextCode(int type) 
{ 
    var codeList = (from o in ObjectQuery 
        where o.Type == Type 
        select o.Code).ToList<string>(); 

    List<int> list = codeList.Select(int.Parse).ToList(); 
    int nextDL = list.Max() + 1; 

    return nextDL.ToString(); 
} 

ответ

1

Это решение, которое я придумал:

var max = (from o in ObjectQuery      
      let num = ObjectQuery.Where(i => i.Type == Type).Select(i => i.Code).Cast<int>().Max() 
      select num).FirstOrDefault() + 1; 

return max.ToString(); 
1

Вы можете попробовать что-то вроде ниже, оно заказывает набор результатов, спускающийся по коду, и затем захватывает первый результат. Обратите внимание, что я не тестировал это, но думаю, что он должен работать.

var codeList = (from o in ObjectQuery 
        where o.Type == Type 
        select o.Code).OrderByDescending(
          x => x.Code).First() 

Вместо OrderByDescending().First() вы можете также использовать OrderBy().Last()

+0

О, но это не будет работать, так как, например, ' "111" <"99" 'while' 111> 99' – Yalda

+0

Да, это имеет смысл, я читаю, что это был varchar, а не int, а orderBy превратил его в алфавитном порядке, так что 99 будет выше в orderByDescending, чем 1000. – JanR

Смежные вопросы