试图做到这一点,但没有成功。 P帮助我解决这个小问题

时间:2014-04-05 20:42:39

标签: c# linq

伙计们来了,我知道这对你们所有人来说似乎都是一个结束,但我未能实现我想要的目标。我的linq查询

  XDocument doc = XDocument.Load(@"E:\OBJECT ORIENTED DEV'T\file.xml");
    XElement root = doc.Root;


    var items = from item in doc.Descendants("ModuleSchedule")
                                          .Descendants("ModuleTimeTable")

                where item.Attribute("Module_ID").Value.Equals("001")
                select new
                {


                   ModuleId = item.Attribute("Module_ID").Value, //works fine

                   Slots = item.Attribute("Day").Value  //Not sure how to achieve this
                   Slots = item.Attribute("Time").Value  // Not sure how to achieve   this

                };



    GridView1.DataSource = items;
    GridView1.DataBind();

这是我的XML结构

  <?xml version="1.0" encoding="utf-8"?>
<ModuleSchedule>
 <ModuleTimeTable Module_ID="001" ModuleName="Module Name 1">
  <Slot Day="Monday" Time="09:30"/>
  <Slot Day="Tuesday" Time="14:30"/>
  <Slot Day="Fridayday" Time="09:30"/>
  <Slot Day="Saturday" Time="12:30"/>
 </ModuleTimeTable>
<ModuleTimeTable Module_ID="002" ModuleName="Module Name 2">
  <Slot Day="Monday" Time="09:30"/>
  <Slot Day="Tuesday" Time="14:30"/>
  <Slot Day="Fridayday" Time="09:30"/>
  <Slot Day="Saturday" Time="12:30"/>
 </ModuleTimeTable>
<ModuleTimeTable Module_ID="003" ModuleName="Module Name 3">
  <Slot Day="Monday" Time="09:30"/>
  <Slot Day="Tuesday" Time="14:30"/>
  <Slot Day="Fridayday" Time="09:30"/>
  <Slot Day="Saturday" Time="12:30"/>    
</ModuleTimeTable>

我想检索与模块ID关联的所有插槽,将它们放在gridview表中,如日期和时间。

谢谢

1 个答案:

答案 0 :(得分:1)

而不是

 doc.Descendants("ModuleSchedule")
    .Descendants("ModuleTimeTable")

只需使用doc.Descendants("ModuleTimeTable")doc.Root.Elements("ModuleTimeTable")

即可

此外,您可能希望在获取属性或元素的值时使用显式强制转换,以避免可能的异常:

var items = from item in doc.Descendants("ModuleTimeTable")
            where (string)item.Attribute("Module_ID") == "001"
            select new
            {
                ModuleId = (int) item.Attribute("Module_ID"),
                Day = (string) item.Element("Slot").Attribute("Day"),
                Time = (string) item.Element("Slot").Attribute("Time")
            };