LINQ to XML!StartsWith

时间:2012-07-25 08:14:10

标签: c# linq

我试图从xml文件中获取所有属性值,其中值不以某些文本开头

我有这个代码

IEnumerable<XElement> elements =
    (from el in xmlFile.Root.Elements(elementName)
     where (string)el.Attribute(attributeName)  !StartWith("abc")
     select el);

我该如何解决这个问题

2 个答案:

答案 0 :(得分:2)

您需要使用有效的表达式,例如

where !el.Attribute(attributeName).Value.StartsWith("abc")

重要的是要理解LINQ where子句中的内容不是“魔术”语法 - 它只是一个普通表达式,它可以使用查询声明的范围变量表达式(在这种情况下为el)。所以你应该问自己,“如果我不是在LINQ中编写这个,并且我有一个名为el的变量引用一个元素,那么我如何编写一个if条件来检查该属性价值不是从abc开始的?“

(当属性可以丢失时我使用显式转换,我想要得到一个null,但是在这种情况下,当属性丢失时你会发生爆炸,而你只想要字符串值,所以你也可以使用Value属性。)

请注意,因为你在这里得到了一个where子句(以及一个普通的select),使用非查询表达式可能会更具可读性形式:

var elements = xmlFile.Root.Elements(elementName)
                      .Where(el => !el.Attribute(attributeName).Value.StartsWith("abc"));

答案 1 :(得分:0)

尝试这个(调整你的开头)

IEnumerable<XElement> elements = 

from el in xmlFile.Root.Elements(elementName) 
where ! el.Attribute(attributeName).Value.StartWith("abc") 
select el;