Buenas tardes. Hace muy poco que he empezado con LINQ (¡¿cómo he podido resistirme tanto tiempo?!). El caso que me trae es LINQ con XML y la idea es sencilla: buscar todos los elementos que estén en una lista, es decir, la clausula WHERE IN. Estas son las funciones:
Código vb:
Ver original'Primero se extraen los identificadores de los elementos a buscar
Protected Sub btnActualizaDestacados_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim lDest As New List(Of String)
For Each gvr As GridViewRow In Me.gvLibros.Rows
If CType(gvr.Cells(0).FindControl("chkDestacar"), CheckBox).Checked Then
lDest.Add(gvr.Cells(1).Text)
End If
Next
Dim c As New Catalogo(btnBuscar.CommandArgument)
Response.Write(c.destaca(lDest.ToArray))
End Sub
'Dentro de la clase Catalogo
Public Function destaca(ByVal IDs() As String) As String
Dim xd As XElement = XElement.Load(_rutaArc)
Dim dests = From c In xd.Descendants(ns + "BookListing") _
Where IDs.Contains(c.Elements(ns + "vendorListingid").Value.ToString) _
Select c
Return dests.Count
End Function
El XML es un catálogo de AbeBooks
Código XML:
Ver original<?xml version="1.0" encoding="utf-8"?>
<BookListingInventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abebooks.com/BookListingXml">
<BookListing listingsid="0" typecode="1001">
<vendorListingid>000001</vendorListingid>
......
La función destaca() siempre me devuelve 0 encontrados y lDest contiene la lista de los identificadores de los títulos marcados. He probado varias combinaciones, incluyendo funciones lambda y nada de nada, siempre 0.
Gracias de antemano y un saludo.