2013-08-20 43 views
0

我正在寻找一些建立LINQ查询的帮助。我想要获得特定数据类型的所有选项卡。我开始建立查询,但似乎仍然存在一些问题。欣赏任何feedback.Thanks周杰伦基于父属性的过滤器

<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); 

回答

0

我会说,你从问题的反面开始。为什么不先找到<DataType>,然后选择全部包含<Tab> s?

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() 
      }; 

我也建议使用Element/Elements适当元素名称更严格比赛中换人doc.Descendants("DataType")。它会使查询更快。我不能为你做,因为我不知道整个文档结构。

+0

它就像一个魅力。谢谢 – jay