【发布时间】:2015-01-23 08:16:41
【问题描述】:
我正在尝试研究如何从 asp.net C# 中的 sql 查询创建树视图菜单。作为学习练习,我有一个包含过去三年假期的数据库——我想创建一个树视图,显示按年份排序的假期。例如“年-->假期名称-->假期日期”,其中“-->”表示层级。
无论如何,我使用此查询从 SQL 将我的假期作为 XML 文档返回:
SELECT [Year], [Holiday], [Date] FROM [Database] FOR XML PATH('Holiday'), ROOT('Holidays')
当然,这会返回一个没有分组的 XML 文档,所以我使用 Linq 将我的假期按年份分组,而数据来自数据库,如下所示:
XmlReader reader = sqlCommand.ExecuteXmlReader();
if (reader.Read())
{
XElement doc = XElement.Load(reader);
var newData =
new XElement("Holidays",
from data in doc.Elements("Holiday")
group data by (int)data.Element("Year") into groupedData
select new XElement("Group",
new XAttribute("ID", groupedData.Key),
from g in groupedData
select new XElement("Holiday",
g.Element("Name"),
g.Element("Date")
)
)
);
这样更好:它按年对我的假期进行分组,但我的树形视图最终看起来像这样:
2012
Holiday
Christmas Eve
12/24/12
Holiday
Christmas Day
12/25/12
Holiday
New Year's Eve
12/31/12
... 等等。我是 Linq 的新手,所以我不确定在这里做什么。我想摆脱那个“假日”级别,并将实际日期设为假日名称的子节点。我不能对 SQL 查询做任何事情,因为 XML 只能有一个根节点。有什么想法吗?
【问题讨论】:
-
你没有解释你的 XML 在你的树中是如何显示的,但是我从你的代码中推断如果一个元素有一个属性
ID,那么它将被显示;否则将显示XElement.Value。对吗?