none
Problema con Linq en Visual Basic 2008 RRS feed

  • Pregunta

  • Estimados,
    tengo un listview que muestra los ingresos dentro del cual lleva el registro si se encuentra cancelado o informado (ingresado pero no cancelado).
    Mi idea es mostrar el total de cancelados como el número de estos, por ejemplo:
    Total Cancelado $ 15.000  N° ingresos: 20
    Total informados $ 32.000 N° ingresos: 45

    Trato de utilizar este código que funciona para contar pero no me resulta al sumar:

            Dim query = From list In lvDetalle.Items.Cast(Of ListViewItem)() _
                Select Estado = list.SubItems(3).Text

            Dim TCanc As Integer = query.Count()

    Por otra parte, como puedo usar la sentencia Where para distingir entre los cancelados e informados.
    Gracias de ante mano
    • Cambiado Fran Diaz jueves, 28 de mayo de 2009 14:33 Linq ([Loc]From:Lenguaje VB.NET)
    martes, 5 de mayo de 2009 22:08

Respuestas

  • hola,

    Creo que hay varias formas de lograrlo.

    podria ser asi:

    Dim query = From list In listView1.Items.Cast(Of ListViewItem)() _
        Where Convert.ToString(list.SubItems("Estado")) = "Cancelado" _
        Select list


    Dim valor As Decimal = query.Sum(Function(item) Convert.ToInt32(item.SubItems("Ingresos")))



    O asi:

    Dim valor2 As Integer = listView1.Items.Cast(Of ListViewItem)().Where(Function(item) Convert.ToString(item.SubItems("Estado")) = "Cancelado").Sum(Function(item) Convert.ToInt32(item.SubItems("Ingresos")))


    O de esta otra forma:

    Dim query3 = From list In listView1.Items.Cast(Of ListViewItem)() _
        Where Convert.ToString(list.SubItems("Estado")) = "Cancelado" _
        Select Convert.ToInt32(list.SubItems("Ingresos"))

    Dim valor3 As Integer = query3.Sum()



    Saludos

    Leandro Tuttini
    • Marcado como respuesta Marco Elgueta jueves, 7 de mayo de 2009 15:10
    jueves, 7 de mayo de 2009 12:34

Todas las respuestas

  • hola,

    Podrias hacer algo como esto:

    Dim query = From list In listView1.Items.Cast(Of ListViewItem)() _
        Where Convert.ToString(list.SubItems("Estado")) = "Cancelado" _
        Select list


    Dim valor As Integer = query.Count()


    O si lo prefieres en una sola linea usando lambda:

    Dim valor As Integer = listView1.Items.Cast(Of ListViewItem)().Where(Function(item) Convert.ToString(item.SubItems("Estado")) = "Cancelado").Count()


    Saludos
    Leandro Tuttini
    miércoles, 6 de mayo de 2009 19:20
  • Hola Leandro,
    gracias por responder. Mi problema no es al realizar el where porque usos las siguientes líneas que funcionan a la perfección. El grave problema es que no sé como sumar:

    Estas líneas las ocupo para contar:

            Dim queryCanc = From list In lvDetalle.Items.Cast(Of ListViewItem)() _
                               Where list.SubItems(4).Text = "Cancelado" _
                               Select cContar = list.SubItems(4).Text, cSuma = list.SubItems(3).Text

    Dim valor As Integer = queryCanc.Count()

    Pero para sumar???

    Dim valor As Integer = queryCanc.Sum(selector as System.Func(Of String, Integer)) as Integer ** este es un mensaje de visual **


    miércoles, 6 de mayo de 2009 21:01
  • Hola Marco

    por si lo necesitas he creado un proyecto de LINQ con varias consultas que creeo te puede servir para tu desarollo ati y a los que quieran aprender mas,  dejo los links por si les interesa

    C#


    Vb.Net



    Nota: Para descargarlos tendran que registrarse


    SALUDOS


    "La verdadera sabiduría está en reconocer la propia ignorancia" www.viconet.org
    miércoles, 6 de mayo de 2009 21:08
  • Estuve revisando los links y están muy interesante pero aún no logro poder sumar con Linq.
    miércoles, 6 de mayo de 2009 22:11
  • hola,

    Creo que hay varias formas de lograrlo.

    podria ser asi:

    Dim query = From list In listView1.Items.Cast(Of ListViewItem)() _
        Where Convert.ToString(list.SubItems("Estado")) = "Cancelado" _
        Select list


    Dim valor As Decimal = query.Sum(Function(item) Convert.ToInt32(item.SubItems("Ingresos")))



    O asi:

    Dim valor2 As Integer = listView1.Items.Cast(Of ListViewItem)().Where(Function(item) Convert.ToString(item.SubItems("Estado")) = "Cancelado").Sum(Function(item) Convert.ToInt32(item.SubItems("Ingresos")))


    O de esta otra forma:

    Dim query3 = From list In listView1.Items.Cast(Of ListViewItem)() _
        Where Convert.ToString(list.SubItems("Estado")) = "Cancelado" _
        Select Convert.ToInt32(list.SubItems("Ingresos"))

    Dim valor3 As Integer = query3.Sum()



    Saludos

    Leandro Tuttini
    • Marcado como respuesta Marco Elgueta jueves, 7 de mayo de 2009 15:10
    jueves, 7 de mayo de 2009 12:34