none
Join a Varias Tablas(donde cada tabla tiene mas de un campo clave) RRS feed

  • Pregunta

  • Estimados

    Tengo un problema que no estoy pudiendo resolver.  Necesito hacer un Join a 2 tablas, que cada una de ellas tiene 2 campos claves:

    Ejemplo:

    Tabla Auto: con los campos claves: Autoid y CategoriaId

    Tabla AutoxCategoria: con los campos claves: Autoid y CategoriaId

    Quiero el join de esta manera con EF.  o con Linq (trabajo con base SQLITE)

    Select * FROM Auto A join AutoxCategoria C ON  A.Autoid = C.Autoid and A.Categoriaid = C.CategoraId

    El problema es que solo me deja igualar solo un campo... pero el "and" o el "&&" para igualar el otro campo no está permitidos.

    Espero haberme hecho entender y gracias de antemano

    Héctor

    martes, 14 de marzo de 2017 13:51

Todas las respuestas

  • Yapura,

    Puedes definir un tipo anónimo para fines de comparación, por ejemplo:

    from a in Auto
    join ac in AutoxCategoria
    	on new { p1 = a.Autoid, p2 = a.CategoriaId } equals 
    	new { p1 = c.Autoid, p2 = c.CategoriaId }
    select a


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 14 de marzo de 2017 14:09
  • Muchas gracias por tu respuesta, lo voy a probar ahora y te aviso..Gracias !!!
    martes, 14 de marzo de 2017 15:07
  • Les dejo un código que les puede servir. Esto es un LEFT JOIN entre varias tablas.

     var _listObj = (from A in _TK3.Auto
                                    join C in _TK3.AutoxCategoria
                                    on A.AutoId equals C.AutoId
                                    join P in _TK3.AutoxPiloto
                                    on A.AutoId equals P.AutoId
                                    from T1 in _TK3.Transponder
                                    .Where (w=>w.TransponderId == A.Transponder1Id).DefaultIfEmpty()
                                    from T2 in _TK3.Transponder
                                    .Where (w => w.TransponderId == A.Transponder2Id).DefaultIfEmpty()
                                     from T3 in _TK3.Transponder.DefaultIfEmpty()
                                     .Where(w => w.TransponderId == A.Transponder3Id).DefaultIfEmpty()
                                    where (P.PilotoId == _pilotId)
                                    select new 
                                    {
                                        Auto_id = A.AutoId,
                                        Numero_Extero = A.Numero_Externo,
                                        Categoria_id = C.CategoriaId,
                                        Categoria = C.Categoria.Descripcion,
                                        TransponderId1 = (A.Transponder1Id != null) ? A.Transponder1Id : 0,
                                        TransponderId2 = (A.Transponder2Id != null) ? A.Transponder2Id : 0,
                                        TransponderId3 = (A.Transponder3Id != null) ? A.Transponder3Id : 0,
                                        Transponder_Number1 = (T1.Numero != null) ? T1.Numero : "0",
                                        Transponder_Number2 = (T2.Numero != null) ? T2.Numero : "0",
                                        Transponder_Number3 = (T3.Numero != null) ? T3.Numero : "0"
    
                                    }).ToList();

    martes, 14 de marzo de 2017 16:45