2012-02-08 30 views
7

Tôi đã viết một phương thức lấy một bộ sưu tập các mặt hàng (các mục giá - mỗi mục có số tiền và mã) và nhóm chúng theo mã rồi trả về một IDictionary trong đó khóa là mã của mặt hàng và giá trị là nhóm các mặt hàng với mã màNhóm một bộ sưu tập và trả lại một từ điển

đây là việc thực hiện các phương pháp này (Hy vọng rằng sẽ làm cho tinh thần!):

public IDictionary<string, IEnumerable<PriceDetail>> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails) 
{ 
    // create a dictionary to return 
    var groupedPriceDetails = new Dictionary<string, IEnumerable<PriceDetail>>(); 

    // group the price details by code 
    var grouping = priceDetails.GroupBy(priceDetail => priceDetail.Code); 

    // foreach grouping, add the code as key and collection as value to the dictionary 
    foreach (var group in grouping) 
    { 
     groupedPriceDetails.Add(group.Key, group); 
    } 

    // return the collection 
    return groupedPriceDetails; 
} 

sau đó tôi đã cố gắng để cấu trúc lại này để sử dụng ToDictionary như vậy :

// group the price details by code and return 
return priceDetails.GroupBy(priceDetail => priceDetail.Code) 
        .ToDictionary(group => group.Key, group => group); 

Tôi gặp lỗi khi tôi cố gắng biên dịch nói rằng tôi không thể chuyển đổi từ từ điển string, IGrouping<string, PriceDetail> sang từ điển string, IEnumerable<PriceDetail>.

Ai đó có thể cho tôi biết cách cấu trúc lại nỗ lực đầu tiên của tôi một cách chính xác theo phương pháp này? Tôi cảm thấy rằng có một cách ngắn gọn hơn để viết nó nhưng không thể hình dung ra!

Trả lời

12

Làm thế nào về:

public ILookup<string, PriceDetail> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails) 
{ 
    return priceDetails.ToLookup(priceDetail => priceDetail.Code); 
} 
+0

Tôi muốn bộ sưu tập trở lại được keyed bởi mã, và giá trị cho mỗi phím nên việc thu PriceDetails cho mã đó - vì vậy >. Tôi có thể làm điều đó với phương pháp của bạn không? –

+1

Nếu bạn đang chuyển đổi sang từ điển chỉ để có khả năng tìm kiếm mã và nhận bộ sưu tập, không có ý định sửa đổi thêm từ điển, ILookup sẽ phù hợp hơn. – Wilhelm

+0

Tiếp theo trong quá trình sau khi tôi đã quay trở lại từ phương thức này là lặp qua bộ sưu tập (vì vậy, đối với mỗi nhóm) và tổng số tiền của tập hợp các chi tiết giá cho nhóm đó. Am i thiếu cái gì ở đây? Tôi có thể làm điều đó bằng cách sử dụng ILookup thay thế? Hoặc, bây giờ tôi đang viết điều này, tôi nghĩ tôi nên trả lại một cái gì đó có mã như một chìa khóa và sau đó một số tiền đó là tổng và làm tất cả trong một phương pháp ... bất kỳ đề xuất đánh giá rất nhiều! –

11

Bạn có thể không cần làm:

priceDetails.GroupBy(priceDetail => priceDetail.Code) 
       .ToDictionary(group => group.Key, group => group.ToList()) 
+2

tôi cảm thấy như thế này là câu trả lời –

Các vấn đề liên quan