我试图从xml文件中获取所有属性值,其中值不以某些文本开头
我有这个代码
IEnumerable<XElement> elements =
(from el in xmlFile.Root.Elements(elementName)
where (string)el.Attribute(attributeName) !StartWith("abc")
select el);
我该如何解决这个问题
答案 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;