none
Obtener elementos de una lista con LinQ RRS feed

  • Pregunta

  • Buenos días.

    Mi consulta es la siguiente:

    Tengo un arreglo de arreglos de comandos SQL, SQLCommand()

    dim arr1() as SqlCommand

    dim arr2() as SqlCommand

    dim arr3() as SqlCommand

    Asumiendo que todos están cargados, y que pertenecen a una lista

    dim lista as List(Of SqlCommand())

    Quiero saber como hago para obtener de la lista un solo arreglo con todos los comandos de todos sus elementos.

    Muchas Gracias.

    • Cambiado Enrique M. Montejo viernes, 20 de julio de 2012 5:54 Consulta LINQ (De:Lenguaje VB.NET)
    martes, 17 de julio de 2012 17:32

Respuestas

Todas las respuestas

  • pero para que haces esto? no le veo el sentido

    ademas si usas listas para que arreglos? usa

    dim lista as List(Of List(Of SqlCommand))

    o sea una lista de una lista cuando usas lsitas genericas descarta los arreglos son para problema

    para tomar un item harias

    Dim list1 As List(Of SqlCommand) = lista(0)

    con esto tomas el priemr item de la lista

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 17 de julio de 2012 17:42
  • Sucede que esto lo quiero implementar en una función que concatena arreglos de comandos, la función pertenece a un ensamblado de utilerías, que otras aplicaciones consumen.

    Las aplicaciones trabajan con arreglos de comandos, y bueno, son muchas las aplicaciones y las variables que utilizan arreglos de comandos para ir a cambiarlos todos de una sola vez.

    Ahora, tengo un procedimiento en la capa de AD que recibe un arreglo de comandos para ejecutarlos de forma atómica, además hay algunas funciones que devuelven un arreglo de comandos según se requiera (Insertar, Actualizar o Eliminar), tomando la información de DataSets, es decir la arquitectura (que ya tiene algunos años), está desarrollada de esta forma.

    Pero hay ocasiones en las que se debe de eliminar registros de una tabla, antes de insertar otros; actualmente se realiza el proceso, en el peor de los casos mediante dos transacciones a la base de datos, una que envía un arreglo de comandos para eliminación y otra con los arreglos de inserción.

    Mi idea es hacer la función para que reciba una cantidad no definida de parámetros de tipo arreglo de comandos, y que los concatene para devolverlos como un único arreglo, de esta forma el proceso podría realizarce de forma atómica en una sola transación.

    Obiamente ya lo tengo resuelto con un ciclo for, pero mi intención es conocer cómo puedo hacerlo con LinQ.

    Public Shared Function ConcatenarComandos( _
            ByVal ParamArray pvoArreglosSQL()() _
            As System.Data.SqlClient.SqlCommand)
            ' Almacena la lista comandos SQL concatenados
            Dim vloRetorno As List(Of System.Data.SqlClient.SqlCommand)
            Try
                ' Inicializa la lista de comandos
                vloRetorno = New List(Of System.Data.SqlClient.SqlCommand)()
                
                ' Por cada parámetro enviado a la función
                For vlnI As Integer = 0 To pvoArreglosSQL.Length - 1
                    ' Agrega a la lista de comandos los comandos del 
                    ' arreglo que pertenecen al parámetro enviado por el usuario
                    vloRetorno.AddRange( _
                        (From SQL In pvoArreglosSQL(vlnI) _
                         Select DirectCast(SQL, System.Data.SqlClient.SqlCommand)).ToArray())
                Next
                ' Devuelve el arreglo de comandos concatenado
                Return vloRetorno.ToArray()
            Catch ex As Exception
                ' Relanza la excepción
                Throw ex
            End Try
        End Function

    martes, 17 de julio de 2012 17:57
  • Buenas,

    Con Linq es realmente sencillo hacer esto:

        Public Function ConcatenarComandos( _
            ByVal ParamArray pvoArreglosSQL()() _
            As System.Data.SqlClient.SqlCommand) As System.Data.SqlClient.SqlCommand()
            Return pvoArreglosSQL.SelectMany(Function(x) x).ToArray
        End Function

    Y ya está. Toda la magia reside en el método SelectMany: http://msdn.microsoft.com/es-es/library/bb534336.aspx#Y0

    Saludos

    • Marcado como respuesta Esteban Andrade viernes, 7 de septiembre de 2012 17:53
    lunes, 23 de julio de 2012 23:13