Описание проблемы:
У меня есть сценарий списка Manufacturers
, каждый из которых содержит Id
, CapacityCode
, Price
. Я хочу найти самую дешевую цену, но только для предметов, у которых у всех производителей одинаковые CapacityCode
общие.
или
public class Manufacturer
{
public int Id { get; set; }
public string CapacityCode { get; set; }
public decimal Price { get; set; }
}
Моя цель:
Чтобы отфильтровать список по элементам, имеющим одинаковые общие коды мощностей, а затем найти минимальную цену.
Например:
{
"Manufacturers": [
{
"Id": 1,
"CapacityCode": "Foo",
"Price": 15
},
{
"Id": 1,
"CapacityCode": "Boo", // Manufacture 2 has no "Boo" so it should be filtered
"Price": 10
},
{
"Id": 2,
"CapacityCode": "Foo",
"Price": 30
},
{
"Id": 2,
"CapacityCode": "Zoo", // Manufacture 1 has no "Zoo" so it should be filtered
"Price": 20
}
}
Вывод для отфильтрованный список должен быть:
{
{
"Id": 1,
"CapacityCode": "Foo",
"Price": 15
},
{
"Id": 2,
"CapacityCode": "Foo",
"Price": 30
}
}
Таким образом, минимальная цена должна быть 15.
Я пытался (и это сработало):
var groups = source.Manufacturers
.GroupBy(m => m.CapacityCode)
.ToList();
var max = groups.Max(g => g.Count());
var filtered = new List<Manufacturer>();
foreach (var group in groups)
{
if (group.Count() != max)
continue;
filtered.AddRange(group);
}
decimal minPrice = filtered.Min(m => m.Price);
Мой вопрос:
Как добиться того же результата с точки зрения производительности и читабельности?