none
JOIN entre IEnumerable y DataTable RRS feed

  • Pregunta

  • Hola a todos, tengo el siguiente código en un programa C#:

    private class reportedSpeciesAtRisk
    {
    	public Int32 IdConglomerado
    	{
    		get;
    		set;
    	}
    	public Byte NumSitio
    	{
    		get;
    		set;
    	}
    	public String NomGenero
    	{
    		get;
    		set;
    	}
    	public String NomCientifico
    	{
    		get;
    		set;
    	}
    	public String Origen
    	{
    		get;
    		set;
    	}
    	public String CATEGORIA
    	{
    		get;
    		set;
    	}
    }
    
    IEnumerable<reportedSpeciesAtRisk> reportedSpecies_AtRiskTable =
    (from DataRow especieReportada in reportedSpecies.Rows
     join DataRow especieEnPeligro in speciesAtRisk.Rows
     on especieReportada["NomGenero"] + " " + especieReportada ["NomCientifico"]
     equals especieEnPeligro["campo"]
     select new reportedSpeciesAtRisk()
     {
        IdConglomerado = Convert.ToInt32(especieReportada["IdConglomerado"]),
        NumSitio = Convert.ToByte(especieReportada["NumSitio"]),
        NomGenero = especieReportada["NomGenero"].ToString(),
        NomCientifico = especieReportada["NomCientifico"].ToString(),
        Origen = especieReportada["Origen"].ToString(),
        CATEGORIA = especieEnPeligro["CATEGORIA"].ToString(),
     }
    );

    Con el resultado trato de hacer otro join con un datatable de la siguiente forma:

    from reportedSpeciesAtRisk reportedSpecies_AtRisk in reportedSpecies_AtRiskTable
    join reported_SpeciesAtRisk in reported_SpeciesAtRiskTable.AsEnumerable()
    on new {reportedSpecies_AtRisk.NomGenero, reportedSpecies_AtRisk.NomCientifico}
    equals new {reported_SpeciesAtRisk.Field<String>("Género"), reported_SpeciesAtRisk.Field<String>("Especie")}

    pero me marca los errores siguientes:

    Un tipo anónimo no puede tener varias propiedades con el mismo nombre 

    Declarador de miembro de tipo anónimo no válido. Los miembros de tipo anónimo deben declararse con una asignación de miembro, un nombre simple o un acceso al miembro. 

    Declarador de miembro de tipo anónimo no válido. Los miembros de tipo anónimo deben declararse con una asignación de miembro, un nombre simple o un acceso al miembro. 

    Ojala puedan ayudarme, de antemano gracias


    Todos los errores son en la linea del equals
    • Editado jeduardonl martes, 18 de junio de 2013 22:00
    martes, 18 de junio de 2013 21:58

Respuestas

  • Ya lo resolvi, me quedo así:

    (from reportedSpeciesAtRisk reportedSpecies_AtRisk in reportedSpecies_AtRiskTable
    join DataRow reported_SpeciesAtRisk in reported_SpeciesAtRiskTable.Rows
    on new
    {
    X = reportedSpecies_AtRisk.NomGenero.ToString(),
    Y = reportedSpecies_AtRisk.NomCientifico.ToString(),
    Z = reportedSpecies_AtRisk.IdConglomerado
    }
    equals new
    {
    X = reported_SpeciesAtRisk.Field<String>("Género"),
    Y = reported_SpeciesAtRisk.Field<String>("Especie"),
    Z = reported_SpeciesAtRisk.Field<Int32>("NoCgl")
    }
    into r_SAR
    from subr_SAR in r_SAR.DefaultIfEmpty()
    select subr_SAR != null ? null : reportedSpecies_AtRisk).Distinct().ToList().Where(row => row != null).ToList();

    • Marcado como respuesta jeduardonl jueves, 20 de junio de 2013 14:40
    jueves, 20 de junio de 2013 14:39

Todas las respuestas

  • hola

    en la segunda query de linq donde defines el select ?

    porque creo que de la unicon de la lista y el datatable debes salir algo que defina propiedades que no se repitan

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    martes, 18 de junio de 2013 23:32
  • a continuación la query completa:

    from reportedSpeciesAtRisk reportedSpecies_AtRisk in reportedSpecies_AtRiskTable
    join DataRow reported_SpeciesAtRisk in reported_SpeciesAtRiskTable.Rows
    on new {reportedSpecies_AtRisk.NomGenero, reportedSpecies_AtRisk.NomCientifico}
    equals new {reported_SpeciesAtRisk.Field<String>("Género"), reported_SpeciesAtRisk.Field<String>("Especie")}
    into r_SAR
    from subr_SAR in r_SAR.DefaultIfEmpty()
    select new
    {
    subr_SAR == null ? null : reportedSpecies_AtRisk
    };

    Debo mencionar que en cuerpo del select me marca otro error:

    Los miembros de tipo anónimo deben declararse con una asignación de miembro, un nombre simple o un acceso al miembro.

    miércoles, 19 de junio de 2013 14:17
  • Modifique el select de la siguiente manera:

    select subr_SAR == null ? null : reportedSpecies_AtRisk;

    y se resolvio el error, quedando solo los errores con los que inicie el hilo.

    quedo en espera de sus consejos y observaciones

    miércoles, 19 de junio de 2013 14:26
  • Ya lo resolvi, me quedo así:

    (from reportedSpeciesAtRisk reportedSpecies_AtRisk in reportedSpecies_AtRiskTable
    join DataRow reported_SpeciesAtRisk in reported_SpeciesAtRiskTable.Rows
    on new
    {
    X = reportedSpecies_AtRisk.NomGenero.ToString(),
    Y = reportedSpecies_AtRisk.NomCientifico.ToString(),
    Z = reportedSpecies_AtRisk.IdConglomerado
    }
    equals new
    {
    X = reported_SpeciesAtRisk.Field<String>("Género"),
    Y = reported_SpeciesAtRisk.Field<String>("Especie"),
    Z = reported_SpeciesAtRisk.Field<Int32>("NoCgl")
    }
    into r_SAR
    from subr_SAR in r_SAR.DefaultIfEmpty()
    select subr_SAR != null ? null : reportedSpecies_AtRisk).Distinct().ToList().Where(row => row != null).ToList();

    • Marcado como respuesta jeduardonl jueves, 20 de junio de 2013 14:40
    jueves, 20 de junio de 2013 14:39
  • Gracias la respuesta, era asignar los valores a variables (x,y,z, étc).

    domingo, 30 de septiembre de 2018 1:04