2011-04-13 39 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