这是我的代码。我基本上希望它能够返回后代而不管字符串的情况。
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.ToLower
和family
上使用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());
答案 0 :(得分:1)
您可以使用允许忽略大小写的Equals
方法:
.Where(node => ((string)node.Attribute(family)).Equals(family,StringComparison.OrdinalIgnoreCase))
我使用了Ordinal比较,但StringComparison枚举中还有其他可用的。