Преобразование родовой сортировки коллекции для использования Linq - PullRequest
0 голосов
/ 08 января 2010

У меня есть бит кода для сортировки списка объектов.

productsList.Sort(
    delegate(Product p1, Product p2)
    {
        int result =  p1.StartDatetime.CompareTo(p2.StartDatetime);
        if (result == 0)
        {
           if (p1.SomeId == p2.SomeId)
           {
               result = 0;
           }
           else if (p1.SomeId == null)
           {
                result = -1;
           }
           else if (p2.SomeId == null)
           {
                result = 1;
           }
        }
        return result;
    });

У меня такое ощущение, что это можно упростить, заменив его на:

productsList = productsList
         .OrderBy(p => p.StartDatetime)
         .ThenBy(p => p.SomeId)
         .ToList();

Я прав в своем предположении?

1 Ответ

2 голосов
/ 08 января 2010

Не совсем, но это близко. Первый мог заказать

List<Product> productsList = new List<Product>() {
    new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 2 },
    new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 4 }
};

в обратном порядке (с SomeId равно 4 первое и SomeId равно 2 секунда), но второе упорядочит их как Product с SomeId равно 2 первое и Product с SomeId равно 4 секунда. Это потому, что делегат, как он определен в настоящее время, не обрабатывает ни одного случая, когда два SomeId являются ненулевыми и разными. Таким образом, что касается делегата, вышеупомянутые два Product "равны", но согласно запросу LINQ они не равны.

...