2016-01-25 103 views
0

我想查詢下面的XDOC來驗證有多少個元素包含以「in」開頭的值。我期望返回4,但總是返回1。LINQ to XML問題計數問題

string xml = @"<Programs><ProgramName>in.sy.prog.n.r1.test-package</ProgramName><ProgramName>un.sy.nopr.n.r1.test-package</ProgramName><ProgramName>sr.pt.mang.n.r1.test-package</ProgramName><ProgramName>in.sy.prog.n.r1.test-packageENCAP</ProgramName><ProgramName>in.sy.prog.n.r1.test-packageENCAPTwo</ProgramName><ProgramName>in.sy.prog.n.r1.test-package2</ProgramName></Programs>"; 
    System.Xml.Linq.XDocument doc = XDocument.Parse(xml); 

    var programNameCount = 
    (from el in doc.Descendants("Programs") 
    where el.Element("ProgramName").Value.ToLower().StartsWith("in.") 
    select el.Element("ProgramName")).Count(); 

回答

2

你想要得到的ProgramName計數不Programs

var programNameCount = (from el in docx.Descendants("ProgramName") 
         where el.Value.ToLower().StartsWith("in.") 
         select el) 
         .Count(); 
+1

驗證並且工作很好 - 接受。謝謝。 – u12345

0

我不認爲你無論是在投影也不是過濾器需要el.Element。此外,您要計算程序名稱的後代,其值以in.開頭,而不是程序的後代。

var programNameCount = (from el in doc.Descendants("ProgramName") 
         where el.Value.ToLower().StartsWith("in.") 
         select el).Count();