mmmno, necesitás 2008. El objeto result del ejemplo es un tipo anónimo que
se declara en el select, por eso tiene un var, si necesitás un datatable
deberías hacer select new datatabla(){inicilización}.
Esto corre sobre .net 2.0 una vez compilado, al referencia necesaria es
System.Core y System.Data.DataExtensions, si creás un proyecto en vs2008 ya
tiene el assembly referenciado.
Si no tenés VS2008 (el express sirve igual) no vas a poder hacerlo (en
realidad sí pero es más complicado) las opción que tenés es meter la lógica
del join en una dll creada con una versión express de vs2008 y llamarla de
2005, eso funciona, sino directamente con vs2008 pro. O sea:
-Te bajás VB.NET o C# 2008 express
-Te armás una clase que reciba dos datatables y arme el join y devuelva una
colección tipada o un datatable depende de lo que necesites
-La referencías desde VS2005
El truco es que VS2008 va a generar código de esa expresión que corre sobre
.net 2.0 y por eso te va a funcionar, sino fijate el ejemplo que te pasé
recién como queda descompilado
Private Shared Sub Main(ByVal args As String())
Dim dt1 As New DataTable
Dim dt2 As New DataTable
Dim result = dt1.AsEnumerable().Join(Of DataRow, DataRow, Object,
<>f__AnonymousType0(Of String, Integer))(dt2.AsEnumerable(), Function (ByVal
d As DataRow)
Return d.Item("columna")
End Function, Function (ByVal d2 As DataRow)
Return d2.Item("columna")
End Function, Function (ByVal d As DataRow, ByVal d2 As DataRow)
Return New { _
.Valor1 = d.Item("valor").ToString, _
.Criterio = Integer.Parse(d.Item("columna").ToString) _
}
End Function)
End Subcomo verás es código de 2.0 (el compilador crea delagados y tipos anónimos) los métodos Join y demás están definidos en System.Core y en System.Data.DataExtensions. Si te complica mucho te recomiendo otra opción. Si no cualquier cosa chiflá saludos, Leonardo. 2009/7/6 Julio Szabo <[email protected]> > *Leonardo*, te paso algunas dudas que tengo al respecto: > > 1. El proyecto donde tengo el Acceso a los Datos esta en VS2005 y en > VB, esto funciona allí ? Ya sé que tengo que convertir el código que me > pasaste de C# a VB. > > 2. El objeto “result”, es un DataTable con el resultado del Join? > > 3. Tengo que instalar algo? Cuales son las referencias que tengo que > agregar al proyecto y cuales son los using o Imports que tengo que agragar > en la clase para que funcione el código que me pasate. > > > > Muchas gracias. > > Saludos, > > > > > > * * > > *Julio E. Szabo* > > Consultoría > > [email protected] <[email protected]> > > tel.: +54 (351) 423 7176 > > cel.: (+54 9) (351) (15) 5 556048 > > [image: Compañía de Tecnologías Latinoamericana]<http://www.ctlcorp.com.ar/> > > *AVISO: El presente mensaje y los archivos adjuntos que incluya pueden > contener información confidencial de uso exclusivo del destinatario > indicado. Cualquier uso en desacuerdo con su propósito, difusión o > publicación, total o parcial, se encuentra prohibida. Si recibió este > mensaje por error, rogamos reenviarlo al emisor y destruir las copias > impresas o grabadas en su sistema.** * > > > > > > *De:* [email protected] [mailto:[email protected]] *En nombre de *Leonardo > Micheloni > *Enviado el:* Lunes, 06 de Julio de 2009 12:09 p.m. > > *Para:* [email protected] > *Asunto:* [puntonet] Realizar Join por codigo > > > > primero los datatables tiene un método que se llama AsEnumerable, es la > clave, después armás el join > > var dt1 = new DataTable(); > > var dt2 = new DataTable(); > > > var result = from d in dt1.AsEnumerable() > join d2 in dt2.AsEnumerable() > on d["columna"] equals d2["columna"] > select new {Valor1 = d["valor"].ToString(), Criterio = > int.Parse(d["columna"].ToString())}; > > algo así, cualquier cosa avisame. > > saludos, Leonardo. > > > > 2009/7/6 Julio Szabo <[email protected]> > > Podría ser una opción, pero no tengo idea como hacerlo, estuve investigando > un poco de linq, pero tengo, como para variar en cualquier proyecto, tengo > una restricción de tiempos en mi cronograma y no tengo mucho tiempo para > ponerme a investigar y hacer pruebas. > > > > Si me podes pasar algún ejemplo de cómo sería esto con linq, te agradecería > mucho. > > > > Saludos, > > > > * * > > *Julio E. Szabo* > > Consultoría > > [email protected] <[email protected]> > > tel.: +54 (351) 423 7176 > > cel.: (+54 9) (351) (15) 5 556048 > > [image: Compañía de Tecnologías Latinoamericana]<http://www.ctlcorp.com.ar/> > > *AVISO: El presente mensaje y los archivos adjuntos que incluya pueden > contener información confidencial de uso exclusivo del destinatario > indicado. Cualquier uso en desacuerdo con su propósito, difusión o > publicación, total o parcial, se encuentra prohibida. Si recibió este > mensaje por error, rogamos reenviarlo al emisor y destruir las copias > impresas o grabadas en su sistema.** * > > > > > > *De:* [email protected] [mailto:[email protected]] *En nombre de *Leonardo > Micheloni > *Enviado el:* Lunes, 06 de Julio de 2009 11:23 a.m. > *Para:* [email protected] > *Asunto:* [puntonet] Realizar Join por codigo > > > > linq? > > 2009/7/6 Julio Szabo <[email protected]> > > Buenos días a todos, > > Les escribo porque tengo un problema que no sé cómo y quizá alguien me > pueda dar una mano. > > Tengo 2 Datatables, oDt1 que viene con datos de una Base de datos y oDt2 > que viene con Datos de un Web Service, ahora bien, como puedo hacer para > hacer un join entre estos dos DataTables??? > > He intentado hacerlo con Relations en un DataSet, pero el problema es que > necesito que el join filtre información, es decir, tengo el siguiente > problema, oDt1 y oDt2, lo que necesito es obtener, oDtResultado: > > > > oDt1 > oDt2 oDtResultado > > ------ > -------------------------- ------------------------- > > 101 106 > Descripcion1 106 Descripcion1 > > 102 108 Descripcion2 > > 103 109 Descripcion3 > > 104 > > 106 > > 110 > > 121 > > > > Y con DataSets, todos los ítems tienen que tener correspondencia en la > relación, que no es mi caso. > > Ya sé que una solución sería recorrer oDt2 y fijarme que no esté en oDt1, > pero quiero saber si lo puedo hacer por algo que sea más rápido o de mejor > performance, ya que este factor es crítico. > > > > Desde ya muchas gracias. > > Saludos, > > * * > > *Julio E. Szabo* > > Consultoría > > [email protected] <[email protected]> > > tel.: +54 (351) 423 7176 > > cel.: (+54 9) (351) (15) 5 556048 > > [image: Compañía de Tecnologías Latinoamericana]<http://www.ctlcorp.com.ar/> > > *AVISO: El presente mensaje y los archivos adjuntos que incluya pueden > contener información confidencial de uso exclusivo del destinatario > indicado. Cualquier uso en desacuerdo con su propósito, difusión o > publicación, total o parcial, se encuentra prohibida. Si recibió este > mensaje por error, rogamos reenviarlo al emisor y destruir las copias > impresas o grabadas en su sistema.** * > > > > > > > > >
<<image001.gif>>
