2013-05-15 21 views
7

Tôi có lớp sau đây:Có cách nào tốt hơn để thiết lập một tài sản chung vào một danh sách các mục trong LINQ

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

sau đó tôi đã thực hiện một danh sách các loại xe như:

 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}, 
      }; 

Tiếp theo Tôi đã cố gắng để có được một danh sách các DatesManufactured và cho mỗi ngày các loại xe được sản xuất vào ngày đó.

Vì vậy, tôi đã đi:

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

này hoạt động tiền phạt nhưng tôi không chắc chắn về phần x.First(). Nó hoạt động nhưng nó không cảm thấy khá đúng. Có ai biết một cách thanh lịch hơn để mã này?

Trả lời

7

Khi bạn sử dụng GroupBy, nó sẽ tạo ra một IGrouping<TKey, TItem>, vì vậy bạn chỉ có thể làm như sau:

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

Tôi không thấy bất kỳ điều gì sai với mã của bạn, nhưng bạn cũng có thể sử dụng x.Key thay vì x.First().DateManufactured không yêu cầu tạo một IEnumerable khác.

3

groupby cho thấy một tài sản chính:

var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) 
    .Select(x => new 
    { 
     x.Key, 
     Vehicles = x.ToList() 
    }); 
Các vấn đề liên quan