LINQ to XML - Where子句

ben*_*c_b 3 c# xml asp.net linq-to-xml

我有一个包含两种类型信息的XML文件 - 位置和作业类型由SLvl值决定.我希望将这些SearchTxt值的值绑定到2个下拉列表(一个用于位置,一个用于作业类型),以用作我页面上的过滤器.

问题是我无法得到我的where子句来过滤SLvl值.使用where子句,不返回任何结果.如果我删除它,查询会返回所有文本值.

C#

using System.Xml.Linq;
using System.Linq;
.....

// Loading from file
XDocument loaded = XDocument.Load(@"http://[LINKREMOVED]/vacancies.aspx");

// Query the data
var q = (from c in loaded.Descendants("items")
         where c.Element("SLvl").ToString() == "0"
         select c.Element("SearchTxt").ToString()).Distinct();

// Populate drop down
foreach(string name in q)
{
    ddlLocation.Items.Add(new ListItem(name, name));
}
Run Code Online (Sandbox Code Playgroud)

XML:

<VacancyMatch>
  <items>
   <SearchID>60</SearchID>
   <SearchTxt>Scotland</SearchTxt>
   <ParentID>0</ParentID>
   <SearchCatID>1</SearchCatID>
   <SLvl>1</SLvl>
   <SubCat>1</SubCat>
  </items>
  <items>
   <SearchID>92</SearchID>
   <SearchTxt>Accounting</SearchTxt>
   <ParentID>60</ParentID>
   <SearchCatID>2</SearchCatID>
   <SLvl>2</SLvl>
   <SubCat>2</SubCat>
 </items>
 ... More items here
</VacancyMatch>
Run Code Online (Sandbox Code Playgroud)

我想问题是数据处于同一水平?这是我第一次使用LINQ to XML,因此任何帮助都非常适合.注意:XML由第三方提供,因此格式化取决于它们.

k.m*_*k.m 11

删除.ToString()并使用.Value属性:

var values = loaded.Descendants("items")
    .Where(i => i.Element("SLvl").Value == "0")
    .Select(i => i.Element("SearchTxt").Value)
    .Distinct();
Run Code Online (Sandbox Code Playgroud)

调用ToString()XElement将以文本形式返回整个节点.例如,如果我们i.Element("SearchTxt").Value在上面的查询中更改i.Element("SearchTxt").ToString()它将产生如下字符串:

<SearchTxt>Accounting</SearchTxt>
Run Code Online (Sandbox Code Playgroud)

访问Value属性将提取节点的内部文本 - 在这种情况下为"Accounting".