2016-01-25 6 views
0

Я пытаюсь запросить следующий XDOC, чтобы проверить, сколько элементов содержит значение, начинающееся с «in». Я ожидаю возврат четырех, но он всегда возвращает один ???Проблема с подсчетом с 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 либо проекции, ни фильтра. Кроме того, вы хотите посчитать потомки ProgramName, значение которых начинается с in., а не потомков программ.

var programNameCount = (from el in doc.Descendants("ProgramName") 
         where el.Value.ToLower().StartsWith("in.") 
         select el).Count(); 
Смежные вопросы