none
left joint linq in datatable RRS feed

  • Pregunta

  • Hola buenos dias

    Tengo dos tablas exactamente iguales

    con 4 campos de tipo entero

    id,   centroCostos, calidad, puesto y esas tablas estan ya cada una en un dataTable 

    imaginencen que las dos tablan tienen los mismos 10 registros todo igual solo el centro de costros es diferente en dos registros de la tabla 1 a la tabla 2. 

    busco con linq obtener esos dos registros

    var result = from a in tabla1.AsEnumerable()
                             join b in tabla2.AsEnumerable() on a.Field<int>("centroCostos") equals b.Field<int>("centroCostos") into tabla3
                             from ab in tabla3.DefaultIfEmpty()
                             select ab;

    hice se codigo pero no funciono. La que manda es tabla 2 si tabla 2 tiene registros en centro de costos distintos a lo que tien tabla uno. esos son los que quiero encontrar.

    Podrian apoyarme con este tema

    miércoles, 8 de agosto de 2018 13:44

Respuestas

  • hola

    que pasa si usas

    var result = from a in tabla1.AsEnumerable()
    			 join b in tabla2.AsEnumerable() on a.Field<int>("centroCostos") equals b.Field<int>("centroCostos") into tabla3
    			 select new {
    				tabla1 = a
    				tabla2 = tabla3
    			 }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de agosto de 2018 14:02
  • hola

    >>me regresa una coleccion en tabla3 y no se lo que s e busca

    si encuentra una coleccion es porque entonces hay mas de una coincidencia y no solo una en tabla2, valida los resultados inselccionado el objeto

    siempre puedes usar el .First() para obtener solo una de las coincidencias

    select new
    {
      tabla1 = a.Field<int>("SapId"),
      tabla2 = tabla3.FirstOrDefault()
    };

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de agosto de 2018 15:14

Todas las respuestas

  • hola

    que pasa si usas

    var result = from a in tabla1.AsEnumerable()
    			 join b in tabla2.AsEnumerable() on a.Field<int>("centroCostos") equals b.Field<int>("centroCostos") into tabla3
    			 select new {
    				tabla1 = a
    				tabla2 = tabla3
    			 }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de agosto de 2018 14:02
  • pues no funciono leandro

    var result = from a in dtEmployeeCenter.AsEnumerable()
                             join b in dtEmployeeProgress.AsEnumerable() on a.Field<int>("CostCenter") equals b.Field<int>("CostCenter") into tabla3
                             select new
                             {
                                 tabla1 = a.Field<int>("SapId"),
                                 tabla2 = tabla3
                             };

    hay esta la consulta con los nombres de los dt reales.

    es que solo tengo dos registros con el campo costcenter distinto 

    debo obtener de dtEmployeeCenter

    solo los registros que son diferente centro de costos con 

    dtEmployeeProgress

    Asi como lo comentaste leandro

    me regresa una coleccion en tabla3 y no se lo que s e busca

    miércoles, 8 de agosto de 2018 14:37
  • hola

    >>me regresa una coleccion en tabla3 y no se lo que s e busca

    si encuentra una coleccion es porque entonces hay mas de una coincidencia y no solo una en tabla2, valida los resultados inselccionado el objeto

    siempre puedes usar el .First() para obtener solo una de las coincidencias

    select new
    {
      tabla1 = a.Field<int>("SapId"),
      tabla2 = tabla3.FirstOrDefault()
    };

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de agosto de 2018 15:14