XML:¿Cómo consultar datos XML en la columna de la base de datos usando Linq a SQL y Linq a XML?
<root>
<item>
<href>http://myurl</href>
</item>
<item>
<href>http://myurl2</href>
</item>
</root>
Los datos XML se almacena en una tabla de base de datos.
¿Puedo construir una consulta Linq que seleccione las filas, extraiga el XML y luego, por ejemplo, extraiga todas las etiquetas href? El resultado final sería una lista de todas las URL para todas las filas seleccionadas.
Este es mi intento, pero no me da lo que quiero, que sería una lista de todos los hrefs para todos los usuarios seleccionados. Acabo de obtener una lista de IEnumerations vacías.
var all = from bm in MYTABLE
select new { name=bm.SPP_USER_ID, xml=(string) bm.SPP_BOOKMARKS_XML};
var docs = from x in all
select XDocument.Parse(x.xml);
var href = from h in docs
select h.Descendants("href");
Solución
había 2 problemas.
- Supongo que la consulta solo se ejecuta cuando realmente se exige un resultado. A medida que progresaba de una consulta de SQL a XML, la consulta resultante se convirtió en una mezcla de SQL y XML y por lo tanto no ejecutable. Mi solución fue forzar un resultado al convertir la consulta SQL en una lista de resultados. Esto separó el linq-sql de linq-xml.
var docs = from x in all
select XDocument.Parse(x.xml);
var docs2 = docs.ToList(); // force result
- El segundo problema fue que olvidé agregar el espacio de nombres a mi consulta XML. Una vez que hice eso obtuve el resultado requerido
XNamespace ns = "http://acme/bookmarks";
var href = from h in docs2
select h.Descendants(ns + "href");
¡Gracias por toda su ayuda!
¿Qué quiere decir con "no darme lo que quiero"? ¿Resultados incorrectos? ¿No hay resultados? ¿Lento? – GalacticCowboy
@GalacticCowboy - editado. Espero que esté más claro ahora – paul
Otra pregunta: ¿cómo está pasando de LINQ a SQL a lo que está llamando aquí "MYTABLE"? ¿O es este pseudocódigo alrededor del "contexto.MYTABLE" real? – GalacticCowboy