2009-07-07 25 views
3

我有大致看起來像這樣的結構:LINQ和組由嵌套結構內的數據

List<ProductLine> -> ID 
        Name 
        ... 
        List<LineOfBusiness> -> ID 
              Name 
              ... 
              List<Watchlist> -> ID 
                   Name 
                   ReportCount 

甲監視列表可以在多個LOBS存在,但ReportCount將只針對存在下報告的計數該WatchList的LoB。我以這種方式在結構中需要他們,因爲對於給定的關注列表,在一個LoB中存在多少報告在其他地方很重要。

我需要做的是獲取不同WatchLists的列表(根據ID進行分組),並讓ReportCount成爲所有LoB中該Watchlist的ReportCount的總和。我無法讓嵌套選擇邏輯正常工作。

回答

8

扁平分層結構的技術是使用SelectMany方法。你需要的東西是這樣的:

var result = mainList.SelectMany(x => x.LineOfBusinessList) 
        .SelectMany(lob => lob.Watchlists) 
        .GroupBy(wl => wl.ID) 
        .Select(g => new { 
          WatchlistID = g.Key, 
          WatchlistName = g.First().Name, 
          ReportCount = g.Sum(item => item.ReportCount) 
        }); 

第一SelectMany調用將在所有項目的原始列表轉換成所有LineOfBusiness對象的序列。第二個SelectMany調用將把一系列LineOfBusiness對象轉換爲一個包含它們的所有Watchlist對象的序列。然後,您將這些Watchlist s分組,並由它們ID執行實際查詢。

+0

g.Key.ID不起作用,g.Key.Name也不起作用。我假設我可以通過詢問g.Key來選擇WatchlistID,但是如何獲取名稱? – Parrots 2009-07-07 20:56:03