2012-02-08 37 views
7

Öğeleri bir koleksiyon (fiyat öğeleri - her öğenin bir tutarı ve bir kodu vardır) içeren bir yöntem yazdım ve bunları kodla gruplandırdıktan sonra anahtarın kod olduğu bir IDictionary döndürür öğenin ve değer o kodla öğelerin grubudurBir koleksiyon topla ve geri dön Sözlük

İşte yöntemin uygulanması var (mantıklı Umut!): Bu yüzden böyle ToDictionary kullanmak sonra refactor çalıştı

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

:

string, IEnumerable<PriceDetail> sözlüğüne string, IGrouping<string, PriceDetail> sözlükten dönüştüremediğimi söyleyen bir derlemeye çalıştığımda hata alıyorum.

Birisi, bu yöntemde ilk denememi nasıl doğru bir şekilde yeniden düzenlemem gerektiğini söyleyebilir mi? Yazmanın daha kısa bir yolunun olduğunu hissediyorum ama anlayamıyorum!

cevap

12

nereden:

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

ben istiyorum ve her anahtarın değeri için PriceDetails toplanması olmalıdır Bu kod - yani >. Bunu senin yöntemiyle yapabilir miyim? –

+1

Sadece bir kodu arama ve bir koleksiyon alma yeteneği için bir sözlüğe dönüştürüyorsanız, sözlüğünü daha fazla değiştirmek için hiçbir niyetiniz olmasa da, ILookup daha iyi bir eşleşmedir. – Wilhelm

+0

Bu yöntemden geri döndükten sonraki süreçte, koleksiyonda yineleme yapmak (böylece her grup için) ve bu grup için fiyat ayrıntılarının toplanması miktarı belirtilir. Burada bir şey mi eksik? Bunu yerine ILookup kullanarak yapabilir miyim? Ya da şimdi bunu yazıyorum, bir kod olarak bir anahtar ve daha sonra bir miktar olan ve bir yöntemde hepsini yapan bir şey döndürmem gerektiğini düşünüyorum ... herhangi bir öneri büyük takdir! –

11

sen yapamaz:

toplama kod tarafından kodlanabilir döndü
priceDetails.GroupBy(priceDetail => priceDetail.Code) 
       .ToDictionary(group => group.Key, group => group.ToList()) 
+2

Bu sorunun cevabı gibi hissediyorum –

İlgili konular