Inicio > .NET, ASP.NET, VB.NET, Visual Studio 2010 > DataTable con XML y LINQ

DataTable con XML y LINQ

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

DataTable using LINQ to DataSets

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: