Pues me acabo de dar de topes, tratando de manejar un archivo XML. La tarea era la siguiente:
Se tiene un archivo en XML, y para leerlo decidí utilizar un Datatable
Dim dtMenu As New DataTable("MenuItem")
dtMenu.ReadXmlSchema(Server.MapPath("Menu.xsd"))
dtMenu.ReadXml(Server.MapPath("Menu.xml"))
Una vez que tenemos el XML cargado en el datatable, se procede a consultarlo con LINQ
Dim query = From NI In dtMenu.AsEnumerable() _
Where NI.Field(Of String)(2) = "0" _
Select NI
Pero cual va siendo mi sorpresa, que el CAST de tipos para el campo que tengo como filtro en el Where no funciona ya que el XML lo esta manejando todo como String. Aquí hay algo curioso, ya que el esquema del XML si hace las validaciones de tipo, pero parece que LINQ se lo pasa por el arco del triunfo.
El error que aparece es algo como esto:
at System.Data.DataRowExtensions.UnboxT`1.ValueField (Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
y el mensaje fue : Message="Specified cast is not valid."
Cual fue la solución, hacer un CAST de tipos antes de compararlo, independiente de LINQ
Dim query = From NI In dtMenu.AsEnumerable() _
Where CType(NI(2), String) = "0" _
Select NI
Como referencia les dejo este link que fue el que me ayudo a solucionar este problema