Сортировка IEnumerable в MVC 2

#c# #asp.net-mvc-2

#c# #asp.net-mvc-2

Вопрос:

Мой уровень обслуживания возвращает IEnumerable<ResortsView> моему контроллеру, и я должен предоставить возможность СОРТИРОВАТЬ результаты в пользовательском интерфейсе по следующим критериям: Цена (исключая товары с нулевой ценой), имя поставщика и рейтинг. Вот фрагмент кода моих объектов / классов:

 [Serializable]
public class ResortsView : SupplierView
{
    public IList<ProductView> ResortProducts { get; set; }
    public string CheckInTime { get; set; }
    public string CheckOutTime { get; set; }
    public virtual IList<ImageView> Images { get; set; }
}

[Serializable]
public class SupplierView
{
    public string SupplierID { get; set; }
    public string SupplierName { get; set; }
    public string Description { get; set; }
    public string Rating { get; set; } 
    public string URL { get; set; }
}

[Serializable]
public class ProductView
{
    public string Code { get; set; }
    public string Description { get; set; }
    public decimal? Price { get; set; }
    public ErrorView PricingError { get; set; }
}
  

Каков наилучший способ обработки сортировки результатов внутри IEnumerable<ResortsView> ?

Ответ №1:

Используйте OrderBy метод стека LINQ:

 IEnumerable<ResortsView> source = GetResorts();
var model = source.OrderBy(rv => rv.CheckInTime);
  

Для заказа по самой низкой, ненулевой цене в ResortProducts :

 var model = source.OrderBy(rv => rv.ResortProducts.Where(p => p.Price > 0).Min(p => p.Price));
  

Комментарии:

1. Спасибо Femaref. Это сработало бы для свойств внутри ResortsView. Как я могу выполнить OrderBy по цене, которая находится внутри ProductView?

2. Вы имеете в виду IEnumerable<ProductView> ?

3. Нет. ResortsView содержит public IList<ProductView> ResortProducts { get; set; } и ProductView имеет цену. Итак, как я могу отсортировать по цене? source.OrderBy(rv => rv.ResortProducts.Price) не будет работать.

4. По чему вы хотите выполнить сортировку? Среднее значение цен? максимальное? минимальное значение?

5. IEnumerable<ResortsView> будет содержать список курортов. Каждый курорт может содержать несколько продуктов с их ценами. Пользователь может сортировать курорты по ценам на продукты (по возрастанию и убыванию), исключая игнорирование ценовых позиций.

Ответ №2:

Скорее всего, если вы захотите использовать динамическую библиотеку LINQ, здесь приведены некоторые инструкции и ссылка для скачивания.

Вам нужно, чтобы ваше действие принимало некоторые параметры сортировки:

 public ActionResult MyAction(string sortField)
{
    return View(myService.MyData().OrderBy(sortField));
}