2013-05-15 7 views
7

Mam następujące klasy:Czy istnieje lepszy sposób, aby ustawić właściwość wspólnego z listą przedmiotów w LINQ

public class Vehicle 
{ 
    public string Make { get; set; } 
    public DateTime DateManufactured { get; set; } 
} 

Następnie sporządził listę pojazdów takich jak:

 var dateTime1 = DateTime.Now.AddDays(-7); 
     var dateTime2 = DateTime.Now.AddDays(-8); 
     var dateTime3 = DateTime.Now.AddDays(-9); 

     var vehicles = new List<Vehicle> 
      { 
       new Vehicle {Make = "Ferrari", DateManufactured = dateTime1}, 
       new Vehicle {Make = "Mazda", DateManufactured = dateTime2}, 
       new Vehicle {Make = "Dodge", DateManufactured = dateTime3}, 
       new Vehicle {Make = "Holden", DateManufactured = dateTime1}, 
       new Vehicle {Make = "Chrysler", DateManufactured = dateTime2}, 
       new Vehicle {Make = "Mazda", DateManufactured = dateTime3}, 
      }; 

Następny Próbowałem uzyskać listę DatesManufactured i dla każdej daty pojazdy, które zostały wyprodukowane w tym dniu.

Więc poszedłem do:

var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) 
       .Select(x => new 
        { 
         x.First().DateManufactured, 
         Vehicles = x.ToList() 
        }); 

To działa grzywny, ale nie jestem pewien co do x.First() części. Działa, ale nie czuje się dobrze. Czy ktoś wie o bardziej eleganckim sposobie zakodowania tego?

Odpowiedz

7

Podczas korzystania GroupBy będzie utworzyć IGrouping<TKey, TItem>, więc można po prostu wykonaj następujące czynności:

var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) 
      .Select(x => new 
       { 
        x.Key, 
        Vehicles = x.ToList() 
       }); 
4

Nie widzę niczego złego w tym kodzie, ale można również użyć x.Key zamiast x.First().DateManufactured, które nie wymagałyby stworzenia kolejnego IEnumerable.

3

GroupBy naraża właściwość Key:

var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) 
    .Select(x => new 
    { 
     x.Key, 
     Vehicles = x.ToList() 
    }); 
Powiązane problemy