我有一个item
对象,如下所示:
item["siteId"] = "{7BAD6B24-3B69-4CB9-AD02-9B0003C1927D}";
item["webId"] = "{F66ED194-A91C-49FA-8672-F87DFEE3EF08}";
item["value"] = "blah";
此示例表示值blah
位于网站{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
}
};
let子句似乎在匿名类型中不起作用,我不确定要在最后一个from子句中添加什么。
有人可以帮忙吗?
答案 0 :(得分:2)
您不能使用在分组前声明的变量。在您的情况下,解决方案很简单。此外,你不能突然结束你的内部查询。我会将查询结构略有不同。
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()
};