Есть список товаров 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);
}
}
// группируем
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 по вкусу.
Для данного случая ещё проще будет сперва отфильтровать, затем сгруппировать
// фильтруем по цене
var topProducts = products.Where(product => product.Price > 50)
// группируем
.GroupBy(grouped => grouped.Group)
// извлекаем самый дорогой
.Select(grouped => grouped.OrderByDescending(g => g.Price).First())
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);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей