Grupowanie anonimowego typu

Grupowanie anonimowego typu
RM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Hej,mam taką prostą listę i zapytanie linq

Kopiuj
 List<Car> myCars = new List<Car>()
            {
                new Car("E250", new Engine(1.8, 204, "CGI"), 2009),
                new Car("E350", new Engine(3.5, 292, "CGI"), 2009),
                new Car("A6", new Engine(2.5, 187, "FSI"), 2012),
                new Car("A6", new Engine(2.8, 220, "FSI"), 2012),
                new Car("A6", new Engine(3.0, 295, "TFSI"), 2012),
                new Car("A6", new Engine(2.0, 175, "TDI"), 2011),
                new Car("A6", new Engine(3.0, 309, "TDI"), 2011),
                new Car("S6", new Engine(4.0, 414, "TFSI"), 2012),
                new Car("S8", new Engine(4.0, 513, "TFSI"), 2012)
            };

            var elements = from car in myCars
                           where car.Model == "A6"
                           select new
                           {
                               engineType = car.Motor.Model == "TDI" ? "diesel" : "petrol",
                               avgHPPL = car.Motor.HorsePower / car.Motor.Displacement
                           }
                           into obj
                           select obj;

Po wykonaniu zapytania kolekcja wynikowa ma wartości:

petrol: 74,8
petrol: 78,5714285714286
petrol: 98,3333333333333
diesel: 87,5
diesel: 103

Chciałbym jeszcze je pogrupować i wyciągnąć średnią z wartości, ale nie wiem jak zrobić to wewnątrz tego zapytania, nie wiem jak odwołać się do tego anonimowego typu

BE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
1
Kopiuj
var elements = myCars
                .Where(x => x.Model == "A6")
                .Select(x => new
                {
                    engineType = x.Motor.Model == "TDI" ? "diesel" : "petrol",
                    avgHPPL = x.Motor.HorsePower / x.Motor.Displacement
                })
                .GroupBy(x => x.engineType)
                .Select(x => new
                {
                    x.First().engineType,
                    agerage = x.Average(z => z.avgHPPL)
                });

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.