Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/04/2013, 09:53
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años
Puntos: 4
WHERE IN en LINQ

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
  1. 'Primero se extraen los identificadores de los elementos a buscar
  2. Protected Sub btnActualizaDestacados_Click(ByVal sender As Object, ByVal e As System.EventArgs)
  3.    Dim lDest As New List(Of String)
  4.    For Each gvr As GridViewRow In Me.gvLibros.Rows
  5.       If CType(gvr.Cells(0).FindControl("chkDestacar"), CheckBox).Checked Then
  6.          lDest.Add(gvr.Cells(1).Text)
  7.       End If
  8.    Next
  9.    Dim c As New Catalogo(btnBuscar.CommandArgument)
  10.    Response.Write(c.destaca(lDest.ToArray))
  11. End Sub
  12.  
  13. 'Dentro de la clase Catalogo
  14. Public Function destaca(ByVal IDs() As String) As String
  15.    Dim xd As XElement = XElement.Load(_rutaArc)
  16.    Dim dests = From c In xd.Descendants(ns + "BookListing") _
  17.       Where IDs.Contains(c.Elements(ns + "vendorListingid").Value.ToString) _
  18.       Select c
  19.    Return dests.Count
  20. End Function
El XML es un catálogo de AbeBooks
Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <BookListingInventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abebooks.com/BookListingXml">
  3.     <BookListing listingsid="0" typecode="1001">
  4.         <vendorListingid>000001</vendorListingid>
  5.         ......
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.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!