基于父属性的过滤器

时间:2013-08-20 17:49:31

标签: linq linq-to-xml

我正在寻找一些帮助来构建LINQ查询。我想得到特定数据类型的所有选项卡。我开始构建查询但似乎仍然有一些问题。感谢任何反馈。谢谢杰伊

  <DataType name="WELL_INDUSTRY">
    <Database key1="key1" key2="" delimeter="">
      <Tabs>
        <Tab>
          <Name>Basic</Name>
var tabs = from tab in doc.Descendants("Tab")
           where tab.Parent.Parent.Attribute("Name").ToString() == "WELL_INDUSTRY"
           select new
           {
               Name = tab.Descendants("Name").First().Value
           };

foreach (var tab in tabs)
    Debug.WriteLine(tab.Name); 

1 个答案:

答案 0 :(得分:0)

我会说,你是从问题的错误方面开始的。为什么不首先找到<DataType>,然后选择包含<Tab>的所有内容?

var tabs = from dt in doc.Descendants("DataType")
           where (string)dt.Attribute("Name") == "WELL_INDUSTRY"
           from tab in dt.Elements("Database").Elements("Tabs").Elements("Tab")
           select new
           {
               Name = (string)tab.Elements("Name").First()
           };

我还建议使用doc.Descendants("DataType") / Element使用正确的元素名称将Elements替换为更多严格匹配。它将使查询更快。我不能为你做那个,因为我不知道整个文档结构。