none
Uniao de dois DataSet RRS feed

  • Pergunta

  • Pessoal,

    Tenho que unir o DataSet1 com o DataSet2

    Os campos comuns entre eles sao: "COD_CLI" e "COD_PROD"

    Devo inserir no DataSet1 o campo "VLR_TOTAL" do DataSet2

    Como devo fazer esta uniao?

    Grato

    Eduardo

    quinta-feira, 29 de agosto de 2013 18:28

Respostas

  • Eduardo,

    Segue um exemplo que você poderá ajustar a sua necessidade:

    DataTable targetTable = dataTable1.Clone();
    var dt2Columns = dataTable2.Columns.OfType<DataColumn>().Select(dc => 
        new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
    targetTable.Columns.AddRange(dt2Columns.ToArray());
    var rowData =
        from row1 in dataTable1.AsEnumerable()
        join row2 in dataTable2.AsEnumerable()
            on row1.Field<int>("ID") equals row2.Field<int>("ID")
        select row1.ItemArray.Concat(row2.ItemArray).ToArray();
    foreach (object[] values in rowData)
        targetTable.Rows.Add(values);



    Ricardo Minoru Makiyama



    sexta-feira, 13 de setembro de 2013 19:39
  • Eduardo,

    Segue outro exemplo mais simples, basta alterar as colunas após o select para obter o resultado que você quer:

    DataTable result = (from t1 in dt1.AsEnumerable()
                                  join t2 in dt2.AsEnumerable() on t1.Field<int>("id") equals t2.Field<int>("id")
                                 select t1).CopyToDataTable();


    Ricardo Minoru Makiyama



    sexta-feira, 13 de setembro de 2013 19:44

Todas as Respostas

  • Deleted
    quinta-feira, 29 de agosto de 2013 19:25
  • José.Diz,

    Obrigado pela resposta.

    Li o artigo do Boreki.

    Mas nao consegui aplicar neste caso ja que tenho DOIS campos para relacionar nos DatSet´s.

    Fiz um teste com dois LookUp´s ( LookUp() and LookUp() ) mas gerou erro no processamento.

    Grato

    Eduardo

    segunda-feira, 2 de setembro de 2013 13:41
  • Eduardo,

    Talvez uma solução seja então você tentar armazenar esta estrutura que você esta querendo em uma única table ou até mesmo em uma table temporária.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 6 de setembro de 2013 14:17
  • Junior,

    Obrigado pela resposta.

    E por este caminho que estou solucionando este problema.

    Eduardo

    sexta-feira, 6 de setembro de 2013 17:19
  • Eduardo,

    Já pensou em fazer isso utilizando LINQ?


    Ricardo Minoru Makiyama


    sexta-feira, 6 de setembro de 2013 18:06
  • Ricardo,

    Obrigado pela resposta.

    Nao tenho o conhecimento, sobre LINQ, necessario.

    Pode me dar uma dica?

    Grato

    Eduardo

    sexta-feira, 13 de setembro de 2013 18:45
  • Eduardo,

    Segue um exemplo que você poderá ajustar a sua necessidade:

    DataTable targetTable = dataTable1.Clone();
    var dt2Columns = dataTable2.Columns.OfType<DataColumn>().Select(dc => 
        new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
    targetTable.Columns.AddRange(dt2Columns.ToArray());
    var rowData =
        from row1 in dataTable1.AsEnumerable()
        join row2 in dataTable2.AsEnumerable()
            on row1.Field<int>("ID") equals row2.Field<int>("ID")
        select row1.ItemArray.Concat(row2.ItemArray).ToArray();
    foreach (object[] values in rowData)
        targetTable.Rows.Add(values);



    Ricardo Minoru Makiyama



    sexta-feira, 13 de setembro de 2013 19:39
  • Eduardo,

    Segue outro exemplo mais simples, basta alterar as colunas após o select para obter o resultado que você quer:

    DataTable result = (from t1 in dt1.AsEnumerable()
                                  join t2 in dt2.AsEnumerable() on t1.Field<int>("id") equals t2.Field<int>("id")
                                 select t1).CopyToDataTable();


    Ricardo Minoru Makiyama



    sexta-feira, 13 de setembro de 2013 19:44
  • Ricardo,

    Obrigado pela resposta.

    Vou tentar adequar a minha necessidade.

    Vou pesquisar masi sobre LINQ

    Grato

    Eduardo

    quinta-feira, 19 de setembro de 2013 14:48