2011-04-13 79 views
0

我有一個item對象,看起來像這樣:如何使用子表達式通過LINQ查詢編寫嵌套組?

item["siteId"] = "{7BAD6B24-3B69-4CB9-AD02-9B0003C1927D}"; 
item["webId"] = "{F66ED194-A91C-49FA-8672-F87DFEE3EF08}"; 
item["value"] = "blah"; 

這個例子代表了一個價值blah是Web {F66ED194-A91C-49FA-8672-F87DFEE3EF08}這是在網站{7BAD6B24-3B69-4CB9-AD02-9B0003C1927D}

此物品與許多其他人的集合。該集合被稱爲items

我試着編寫一個LINQ查詢,首先按網站ID,然後按網絡ID進行分組,但是無法獲得正確的語法。這裏是我的嘗試:

var itemGroups = from item in items.Cast<SPListItem>() 
    let siteId = (string) item["siteId"] 
    group item by siteId 
    into siteGroup 
    select new 
     { 
      SiteId = siteId, 
      SiteGroups = 
       from siteItem in siteGroup 
       let webId = (string) siteItem["webId"] 
       group siteItem by webId into webGroup 
       select new 
        { 
         WebId = webId, 
         WebGroups = from siteItem in webGroup 
        } 
       }; 

的讓利條款似乎並不匿名類型中工作,我不知道該怎麼從子句添加到最後。

任何人都可以請協助嗎?

+0

'item'是什麼類型?字典? – zerkms 2011-04-13 04:45:04

+0

@zerkms:這是SPListItem - 一個自定義對象與索引器上'this [string]' – 2011-04-13 05:09:41

回答

2

您不能使用在group by之前聲明的變量。在你的情況下,解決方案很簡單。此外,你不能像這樣突然結束你的內部查詢。我會構造查詢有點不同。

var itemGroups = from item in items.Cast<SPListItem>() 
        let siteId = (string) item["siteId"] 
        group item by siteId 
        into siteGroup 
        let siteGroups = from siteItem in siteGroup 
            let webId = (string) siteItem["webId"] 
            group siteItem by webId 
            into webGroup 
            select new 
               { 
                WebId = webGroup.Key, 
                WebGroups = (from wg in webGroup select wg).ToList() 
               } 
        select new 
          { 
           SiteId = siteGroup.Key, 
           SiteGroups = siteGroups.ToList() 
          }; 
+0

你能幫我用這個linq查詢請:http://stackoverflow.com/questions/38120664/how-to-group-by-對2 - 兒童實體和-GET-總的,既-這個孩子實體 – 2016-06-30 12:41:06