2012-01-23 5 views
0

У меня есть класс Customer, у которого есть ордера ListOf. Я пытаюсь сортировать все заказы по дате. Дата "ORDER_DATE" является строка в YYYY: MM: DD HH: MM:. Формат SS»LINQ OrderBy not sorting

Вот код Lambda выражение:

Dim orders() = Customer.Orders.ToArray().OrderBy(Function(c) c.order_date).ToArray() 

Это не кажется, сортировка даты.

Я попытался преобразовать DateTime, который прекрасно работает, если ORDER_DATE равна нулю или имеет какое-то значение, но если дата ORDER_DATE является пустым, то он вызывает исключение.

Dim orders() = Customer.Orders.OrderBy(Function(c) (Not String.IsNullOrEmpty(c.order_date))).ThenBy(Function(c) Convert.ToDateTime(c.order_date)).ToArray() 
+0

Что проблема первого способа? что такое ввод/вывод? –

+0

Заказы не отсортированы. – Amir

+0

Выход такой же, как и вход? –

ответ

0

я могу видеть, что вы используете VB Я использую C#, но вы должны быть в состоянии перевести

var orders = Customer.Orders.ToList().Sort((a,b)=> a.order_date.Compare(b.order_date)) 

MSDN имеет полную статью here

Если вы пытаетесь использовать Linq2SQL/Entities то и вы хотите OrderBy в базе данных перед тем, как их обратно в Память. Перед сортировкой вам не нужно делать ToArray(). также рассмотрите использование синтаксиса linq для кода, который встречается в базе данных. она дает понять разработчикам, где вы запрашиваете

var orders = (from o in DataContext.Orders 
       where o.Customer.Id == customerId 
       orderby o.order_date 
       select o) 

Вот еще один пример

static void Main(string[] args) 
    { 
     var dates = new List<DateTime?>() 
        { 
         null, 
         null, 
         new DateTime(2001, 2, 3), 
         null, 
         new DateTime(2001, 12, 3), 
         new DateTime(2021, 12, 3) 
        }; 

     dates.Sort(CompareDates); 

    } 

    private static int CompareDates(DateTime? x, DateTime? y) 
    { 
     if (x == null) 
     { 
      return y == null ? 0 : -1; 
     } 
     return y == null ? 1 : x.Value.CompareTo(y.Value); 
    } 
+0

В чем разница между неявным или явным вызовом метода 'Comapre'? –

+0

Означает ли это, что мне нужно написать функцию сравнения. Строка Customer.Orders.ToList(). Сортировка ((a, b) => a.order_date.Compare (b.order_date)) не компилируется – Amir

+0

Я собрал полный пример для вас с помощью метода сравнения, который использует Nullable DateTime – Peter