如何将XElement转换为小写?

时间:2014-06-03 13:45:13

标签: c# linq .net-4.0

这是我的代码。我基本上希望它能够返回后代而不管字符串的情况。

XElement doc = XElement.Load(myReader.ReadSubtree());
IEnumerable<XElement> query1 = doc.Descendants(es + family).Descendants(es + parameterName.Trim());

如果family是&#34;琼斯&#34;,但是在XML&#34; jones&#34;中,则找不到任何内容。同样的事情发生在parameterName

有没有办法将XElement doc更改为小写?这样我就可以在String.ToLowerfamily上使用parameterName

我发现了这个reply,但我不知道如何在这里实施该解决方案。

由于我很少使用linq,并且我知道前面的代码有效,我尝试一步一步地使用where扩展名,但它没有返回任何内容:

IEnumerable<XElement> query1 = doc.Descendants(es + family).Where(node => (string)node.Attribute(family) == family)
    .Descendants(es + parameterName.Trim()).Where(node => (string)node.Attribute(parameterName) == parameterName);

由于这种改变并没有带来任何回报,我没有超越它。

我还尝试了以下代码,并且在第一个扩展名中出现了运行错误:

IEnumerable<XElement> query1 = 
    doc.Descendants(es + family).Where(node => node.Attribute(family).ToString().ToLower() == family.ToLower())
    .Descendants(es + parameterName.Trim()).Where(node2 => node2.Attribute(parameterName).ToString().ToLower() == parameterName.ToLower());

1 个答案:

答案 0 :(得分:1)

您可以使用允许忽略大小写的Equals方法:

.Where(node => ((string)node.Attribute(family)).Equals(family,StringComparison.OrdinalIgnoreCase))

我使用了Ordinal比较,但StringComparison枚举中还有其他可用的。