在带有 LINQ to XML 的 VB.NET 中,where 子句在属性值和字符串之间设置不区分大小写的比较
Posted
技术标签:
【中文标题】在带有 LINQ to XML 的 VB.NET 中,where 子句在属性值和字符串之间设置不区分大小写的比较【英文标题】:in VB.NET with LINQ to XML on where clause set case insensitive comparsion between attributes value and string 【发布时间】:2021-09-24 18:23:09 【问题描述】:在使用 LINQ to XML 的 Vb.Net 中,我试图在 where 子句上设置不区分大小写的比较,然后我得到(对象引用不是对象的实例)。
Dim CSFilePathName As String = File.ToString
Dim CSDoc As XDocument = XDocument.Load(CSFilePathName)
Dim CSquery2 As IEnumerable(Of XElement) = From element In CSDoc.Root.Descendants
Where element.@Column.Equals(RichTextBox8.Text, StringComparison.InvariantCultureIgnoreCase)
Select element
任何想法我做错了什么?
【问题讨论】:
您正在处理的 XML 样本在哪里? 【参考方案1】:当 XElement 上不存在 Column
属性时,您将收到此异常。以这个 XML 为例:
<root>
<child Column="1">Column1</child>
<child>No Column</child>
</root>
这会引发异常,因为第二个<child>
没有Column
属性。
要解决这个问题,您需要先检查该属性是否存在:
Dim CSquery2 As IEnumerable(Of XElement) = From element In CSDoc.Root.Descendants
Where element.Attribute("Column") IsNot Nothing AndAlso element.@Column.Equals(RichTextBox8.Text, StringComparison.InvariantCultureIgnoreCase)
Select element
示例:https://dotnetfiddle.net/R1nk8r
【讨论】:
【参考方案2】:问题在于 .Equals。
Dim xe As XElement = <root>
<child Column="a">Column1</child>
<child>No column attribute</child>
<child Column="A">Column1</child>
</root>
使用该数据试试这个,
Dim ie As IEnumerable(Of XElement)
ie = From element In xe.Elements
Where Not String.IsNullOrEmpty(element.@Column) AndAlso
element.@Column.Equals("a", StringComparison.InvariantCultureIgnoreCase)
Select element
请注意,这是可行的
Dim ie As IEnumerable(Of XElement)
ie = From element In xe.Elements
Where element.@Column = "a" OrElse element.@Column = "A"
Select element
【讨论】:
以上是关于在带有 LINQ to XML 的 VB.NET 中,where 子句在属性值和字符串之间设置不区分大小写的比较的主要内容,如果未能解决你的问题,请参考以下文章
在 VB.NET 中使用带有匿名方法的 LINQ 的 ForEach
VB.Net Linq to Entities Null 比较 - “啥都没有”或“= 啥都没有”?
使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥