Методы расширения LINQ

500
24 декабря 2016, 14:49

Есть список товаров List<Product>, в котором Product имеет свойства стоимость Cost и группа Group. Можете привести пример как использовать метод расширения, чтобы получить товар, к примеру самый дорогой (но не ниже стоимости 50$) по каждой группе? Спасибо.

var rez = new Dictionary<string, List<Product>>();
foreach (var pr in rez)
{
   if (pr.Value > 50)
   {
      List<Product> prodByGroup;
      if (!rez.TryGetValue(p.Group, out prodByGroup))
      {
          prodByGroup = new List<Product>();
          rez.Add(p.Group, prodByGroup);
      }
      prodByGroup.Add(pr);
  } 
}
Answer 1
// группируем
var topProducts = products.GroupBy(product => product.Group)
    // фильтруем группы по цене каждого более 50
    .Where(grouped => grouped.All(product => product.Price > 50))
    // извлекаем самый дорогой
    .Select(grouped => grouped.OrderByDescending(g => g.Price).First())

Затем можно добавить ToList или ToArray по вкусу.

UPDATE

Для данного случая ещё проще будет сперва отфильтровать, затем сгруппировать

// фильтруем по цене
var topProducts = products.Where(product => product.Price > 50)
    // группируем
    .GroupBy(grouped => grouped.Group)
    // извлекаем самый дорогой
    .Select(grouped => grouped.OrderByDescending(g => g.Price).First())
Answer 2
var grpups = products.Select(o => o.Group).Distinct();
var result = new Dictionary<string, List<Product>>();
foreach(var mygroup in groups)
{
  result.Add(mygroup, products.Where(x => x.Cost > 50 && x.Group == mygroup);
}
READ ALSO
загрузка и распаковка архивов в c#

загрузка и распаковка архивов в c#

У меня есть программа на с, которая загружает документы ворд, а затем нужное содержимое документа раскидывает по таблице DataGridViewТеперь нужно,...

389
Как корректно соединить имя файла с путем к файлу? [требует правки]

Как корректно соединить имя файла с путем к файлу? [требует правки]

Как корректно соединить имя файла с путем к файлу?

434
Парсинг сайтов в .NET

Парсинг сайтов в .NET

Пытаюсь распарсить сайт через AngleSharp

689
Google Drive REST API Сервисный аккаунт

Google Drive REST API Сервисный аккаунт

Помогите разобраться

502