LINQ OrderBy не сортирует - PullRequest
       3

LINQ OrderBy не сортирует

0 голосов
/ 24 января 2012

У меня есть класс Customer, у которого есть ListOf Orders. Я пытаюсь отсортировать все заказы по дате. Дата "order_date" является строкой в ​​формате ГГГГ: ММ: ДД ЧЧ: ММ: СС.

Вот код лямбда-выражения:

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()

1 Ответ

0 голосов
/ 24 января 2012

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

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

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

Если вы пытаетесь использовать Linq2Sql / Entities, то вы хотите упорядочить базу данных, прежде чем вернуть их обратно в память. Вам не нужно делать 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);
    }
...