none
Problema al enlazar: linq to entities, generics, databinding con datagrid RRS feed

  • Pregunta

  • Hola

    tengo una metodo en una clase que ejecuta la siguientes consulta con linq

    Function GetDatosxx(dDel As Date, dHasta As Date) As IQueryable

            Dim q2 = From d In db.doc _
                   Join u In db.user _
                    On d.IDUSER Equals u.IDUSER
                    Where dDel <= d.FCALTA And d.FCALTA <= dHasta
                    Select New With {d.IDDOCU, d.IDUSER, d.NUCOLU, d.NUFILA, d.NUGEST, d.OPSELLO, d.OPTEXTO, u.DSNOMB}

    Return q2

    in en mi winform tengo que enzalar este resultado para q se muestre en un datagrid y lo hago asi

    Dim oDocu As New clsDocu
    Dim q = oDocu.GetDatosxx(dtpConsFecDesde.Value.Date, dtpConsFecHasta.Value.Date)
    dgConsulta.DataSource = q

    y en la ultima linea tengo este error

    Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().

    No entiendo que hacer y no encontre mucho referente a este error. alguna idea????

    por otro lado, no se si  mi forma de declarar el resultado de la funcion esta bien como iqueereable o como hago para los tipos de datos anonimos (generics)  que es lo que me arma la consulta.

    Estoy usando VS2012 y el proyecto es winforms con framework 4.0

    Muchas Gracias


    Salu2 Sergio T


    • Editado SergioT jueves, 31 de octubre de 2013 13:48
    jueves, 31 de octubre de 2013 13:46

Respuestas

  • hola

    deberias crear una clase concreta para devolver los datos

    Function GetDatosxx(dDel As Date, dHasta As Date) As List(Of Datos)
    
    	Dim q2 = From d In db.doc _
    				Join u In db.user _
    				On d.IDUSER Equals u.IDUSER
    				Where dDel <= d.FCALTA And d.FCALTA <= dHasta
    				Select New Datos With { _
    					IDDOCU = d.IDDOCU, _
    					IDUSER = d.IDUSER, _
    					NUCOLU = d.NUCOLU, _
    					NUFILA = d.NUFILA, _
    					.
    					}
    
    	Return q2.ToList()
    	
    End Function

    entonces defines

    Public Class Datos

        Public Property IDDOCU As String

        ....

    End class

    Nota: la forma en que defini las propiedades en el ejmeplo requieren .net 4 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta SergioT jueves, 31 de octubre de 2013 20:08
    jueves, 31 de octubre de 2013 14:09

Todas las respuestas

  • hola

    deberias crear una clase concreta para devolver los datos

    Function GetDatosxx(dDel As Date, dHasta As Date) As List(Of Datos)
    
    	Dim q2 = From d In db.doc _
    				Join u In db.user _
    				On d.IDUSER Equals u.IDUSER
    				Where dDel <= d.FCALTA And d.FCALTA <= dHasta
    				Select New Datos With { _
    					IDDOCU = d.IDDOCU, _
    					IDUSER = d.IDUSER, _
    					NUCOLU = d.NUCOLU, _
    					NUFILA = d.NUFILA, _
    					.
    					}
    
    	Return q2.ToList()
    	
    End Function

    entonces defines

    Public Class Datos

        Public Property IDDOCU As String

        ....

    End class

    Nota: la forma en que defini las propiedades en el ejmeplo requieren .net 4 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta SergioT jueves, 31 de octubre de 2013 20:08
    jueves, 31 de octubre de 2013 14:09
  • Hola Leandro

    gracias por la ayuda, esa forma es la que ya estaba pensando aplicar peroooo, la pregunta del millon es No hay forma de manejar esto con generics sin necesidad de armar una clase propia??? a puro tipos anonymous??

    Thnks :)


    Salu2 Sergio T

    jueves, 31 de octubre de 2013 16:01
  • No hay forma de manejar esto con generics sin necesidad de armar una clase propia?

    hasta donde se no

    quizas usando dynamic se pueda lograr, peor se que este esta habilitado en c#, quizas exista el equivalente

    VB.Net equivalent for C# 'dynamic' with Option Strict On

    pero no se como actuara linq en ese caso, quizas siga devolviendo un IQueryable

    se que el anonimo no se puede retornar como respuesta

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 31 de octubre de 2013 16:06