2014-05-27 3 views
-2

Привет, ребята у меня есть модель, как это:OrderByDescending в EF не работает

public partial class Path 
{ 
    public Path() 
    { 
     this.Sensors = new HashSet<Sensor>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string StartStationId { get; set; } 
    public string EndStationId { get; set; } 
    public int LineId { get; set; } 
    public string Order { get; set; } 

    public virtual Line Line { get; set; } 
    public virtual ICollection<Sensor> Sensors { get; set; } 
} 

Я попытался упорядочить список данного лица следующим кодом:

List<Path> lstPath = _dbcontext.Paths.Where(i=>i.LineId==lineNumber).OrderByDescending(i => i.Order).ToList(); 

Кстати я меняю его на этот код:

List<Path> lstPath = _dbcontext.Paths.Where(i=>i.LineId==lineNumber).ToList(); 
     lstPath = lstPath.OrderByDescending(i => i.Order).ToList(); 

Но он не сортирует список по коду заказа !!! Почему?

С наилучшими пожеланиями

+0

Что выглядит «Order»? Какой порядок вы видите и чего вы ожидаете? –

+0

Как выглядит значение 'Order'? Это число, которое хранится в виде строки? Скорее всего, вы сортируете по алфавиту вместо численного, и, возможно, сначала нужно его преобразовать: 'lstPath.OrderByDescending (i => Convert.ToInt32 (i.Order))' –

+2

Объясните, что означает «не работает». Что, в частности, идет не так? Вы говорите ему делать что-то совершенно другое, а именно сортировать список в памяти, а не запрашивать базу данных для сортировки данных, и они могут определить «сортировку» по-разному, но они оба будут «работать». – Servy

ответ

2

Поскольку вы сохраняете число в виде строки, скорее всего, вы сортировки в алфавитном порядке, а не в цифровой форме, например:

1 
10 
11 
2 
3 
... 

Правильным было бы сделать, чтобы изменить свою модель так что Order является числовой тип, так как:

  1. Сохранение числовых данных в виде строк изначально плохой дизайн
  2. Вы будете иметь модель, которая на самом деле соответствует источнику данных
  3. Вы берете догадки из сортировки данных («Order» не является значение тайны)

EDIT: я удалил предыдущую suggestipn к преобразуйте свойство Order в Integer в выражение lambda OrderByDescending, но Entity Framework не может выполнить это действие по отношению к базе данных, поэтому потребуются накладные расходы на сортировку данных в памяти.

+0

После выполнения этой ошибки: LINQ to Entities не распознает метод Int32 ToInt32 (System.String) ', и этот метод не может быть переведен в выражение хранилища –

+0

@EA Вы можете использовать 'Convert.ToInt32' в памяти, то есть после вызова 'ToList' или' AsEnumerable'. –

+0

@ p.s.w.g да мне нужно отсортировать значения в памяти –

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