none
Retornando DataTable a partir de um Linq Entity RRS feed

  • Pergunta

  • Bom dia a todos!Pessoal, no meu projeto tenho um Linq onde este realiza uma consulta no banco,fazendo um select retornando dados de tabelas com relacionamentos,ou seja, retornando um objeto com esses dados...Na verdade, eu preciso que me retorne um Datatable, uma vez que nao consegui ainda sucesso com isso..Estou postando o codigo para melhor esclarecimento...

    Codigo Entity

    public Object Listar(Int32 codigoPessoa)
            {
                try
                {
                    var results = from tbEndereco in db.tb_endereco
                                  join tbPessoa in db.tb_pessoa on tbEndereco.pessoa equals tbPessoa.codigo                 
                                  join tbMunicipio in db.tb_municipio on tbEndereco.municipio equals tbMunicipio.codigo
                                  join tbUf in db.tb_uf on tbMunicipio.uf equals tbUf.codigo
                                  where tbEndereco.pessoa.Equals(tbPessoa.codigo)                             
                                  where tbEndereco.municipio.Equals(tbMunicipio.codigo)
                                  where tbMunicipio.uf.Equals(tbUf.codigo)
                                  where tbEndereco.pessoa.Equals(codigoPessoa)
                                  select new
                                  {
                                      tbEndereco.bairro,
                                      tbEndereco.cep,
                                      tbEndereco.logradouro,
                                      descricaoMunic = tbMunicipio.descricao,
                                      descricaoUf = tbUf.descricao,
                                      tbEndereco.tipoEnd,
                                      tbEndereco.pessoa,
                                      tbEndereco.nro
                                  };
                   

    return results.ToList();

    Alguem pode ajudar??Obrigado...

    quinta-feira, 1 de março de 2012 12:47

Respostas

  • Este código acima é o modo mais fácil. Se quiser fazer na "unha", segue um exemplo.

    ** obs: utilizei aquele mesmo código do outro post.

    Inserindo a consulta em um DataTable:

        public static DataTable PegarDadosEmployeeDTODataTable()
        {
            List<DadosEmployeeDTO> lstEmployeeDTO = PegarDadosEmployeeDTO();
    
            DataTable dtEmployeeDTO = new DataTable();
            DataColumn column_EmployeeID = new DataColumn("EmployeeID");      
            DataColumn column_FirstName = new DataColumn("FirstName");
            DataColumn column_LastName = new DataColumn("LastName");        
            DataColumn column_BirthDate = new DataColumn("BirthDate");
    
            //adiciona DataColumn's
            dtEmployeeDTO.Columns.Add(column_EmployeeID);
            dtEmployeeDTO.Columns.Add(column_FirstName);
            dtEmployeeDTO.Columns.Add(column_LastName);
            dtEmployeeDTO.Columns.Add(column_BirthDate);
    
            DataRow row;
    
            foreach (DadosEmployeeDTO EmployeeDTO in lstEmployeeDTO)
            {
                row = dtEmployeeDTO.NewRow();
                row[column_EmployeeID] = EmployeeDTO.EmployeeID;
                row[column_FirstName] = EmployeeDTO.FirstName;
                row[column_LastName] = EmployeeDTO.LastName;
                row[column_BirthDate] = EmployeeDTO.BirthDate;
    
                dtEmployeeDTO.Rows.Add(row);
            }
    
            return dtEmployeeDTO;
        }
    

    Chamando na interface:

    GridView1.DataSource = EmployeeDAL.PegarDadosEmployeeDTODataTable();
    GridView1.DataBind();

    Código completo com o método PegarDadosEmployeeDTO:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Collections.Generic;
    
    /// <summary>
    /// Summary description for EmployeeDAL
    /// </summary>
    public class EmployeeDAL
    {
        public static  List<DadosEmployeeDTO> PegarDadosEmployeeDTO()
        {
            ModelDataContext db = new ModelDataContext();
            var consulta = (from e in db.Employees
                           select new DadosEmployeeDTO()
                           {
                               EmployeeID = e.EmployeeID,
                               FirstName = e.FirstName,
                               LastName = e.LastName,
                               BirthDate = DateTime.Parse(e.BirthDate.ToString())
                           });
    
            return consulta.ToList();
        }
    
        public static DataTable PegarDadosEmployeeDTODataTable()
        {
            List<DadosEmployeeDTO> lstEmployeeDTO = PegarDadosEmployeeDTO();
    
            DataTable dtEmployeeDTO = new DataTable();
            DataColumn column_EmployeeID = new DataColumn("EmployeeID");      
            DataColumn column_FirstName = new DataColumn("FirstName");
            DataColumn column_LastName = new DataColumn("LastName");        
            DataColumn column_BirthDate = new DataColumn("BirthDate");
    
            //adiciona DataColumn's
            dtEmployeeDTO.Columns.Add(column_EmployeeID);
            dtEmployeeDTO.Columns.Add(column_FirstName);
            dtEmployeeDTO.Columns.Add(column_LastName);
            dtEmployeeDTO.Columns.Add(column_BirthDate);
    
            DataRow row;
    
            foreach (DadosEmployeeDTO EmployeeDTO in lstEmployeeDTO)
            {
                row = dtEmployeeDTO.NewRow();
                row[column_EmployeeID] = EmployeeDTO.EmployeeID;
                row[column_FirstName] = EmployeeDTO.FirstName;
                row[column_LastName] = EmployeeDTO.LastName;
                row[column_BirthDate] = EmployeeDTO.BirthDate;
    
                dtEmployeeDTO.Rows.Add(row);
            }
    
            return dtEmployeeDTO;
        }
    }
    

    Saída:


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    quinta-feira, 1 de março de 2012 13:11

Todas as Respostas

  • // Query the SalesOrderHeader table for orders placed 
    // after August 8, 2001.
    IEnumerable<DataRow> query =
        from order in orders.AsEnumerable()
        where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
        select order;
    
    // Create a table from the query.
    DataTable boundTable = query.CopyToDataTable<DataRow>();

    http://msdn.microsoft.com/en-us/library/bb386921.aspx


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    quinta-feira, 1 de março de 2012 12:53
  • Este código acima é o modo mais fácil. Se quiser fazer na "unha", segue um exemplo.

    ** obs: utilizei aquele mesmo código do outro post.

    Inserindo a consulta em um DataTable:

        public static DataTable PegarDadosEmployeeDTODataTable()
        {
            List<DadosEmployeeDTO> lstEmployeeDTO = PegarDadosEmployeeDTO();
    
            DataTable dtEmployeeDTO = new DataTable();
            DataColumn column_EmployeeID = new DataColumn("EmployeeID");      
            DataColumn column_FirstName = new DataColumn("FirstName");
            DataColumn column_LastName = new DataColumn("LastName");        
            DataColumn column_BirthDate = new DataColumn("BirthDate");
    
            //adiciona DataColumn's
            dtEmployeeDTO.Columns.Add(column_EmployeeID);
            dtEmployeeDTO.Columns.Add(column_FirstName);
            dtEmployeeDTO.Columns.Add(column_LastName);
            dtEmployeeDTO.Columns.Add(column_BirthDate);
    
            DataRow row;
    
            foreach (DadosEmployeeDTO EmployeeDTO in lstEmployeeDTO)
            {
                row = dtEmployeeDTO.NewRow();
                row[column_EmployeeID] = EmployeeDTO.EmployeeID;
                row[column_FirstName] = EmployeeDTO.FirstName;
                row[column_LastName] = EmployeeDTO.LastName;
                row[column_BirthDate] = EmployeeDTO.BirthDate;
    
                dtEmployeeDTO.Rows.Add(row);
            }
    
            return dtEmployeeDTO;
        }
    

    Chamando na interface:

    GridView1.DataSource = EmployeeDAL.PegarDadosEmployeeDTODataTable();
    GridView1.DataBind();

    Código completo com o método PegarDadosEmployeeDTO:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Collections.Generic;
    
    /// <summary>
    /// Summary description for EmployeeDAL
    /// </summary>
    public class EmployeeDAL
    {
        public static  List<DadosEmployeeDTO> PegarDadosEmployeeDTO()
        {
            ModelDataContext db = new ModelDataContext();
            var consulta = (from e in db.Employees
                           select new DadosEmployeeDTO()
                           {
                               EmployeeID = e.EmployeeID,
                               FirstName = e.FirstName,
                               LastName = e.LastName,
                               BirthDate = DateTime.Parse(e.BirthDate.ToString())
                           });
    
            return consulta.ToList();
        }
    
        public static DataTable PegarDadosEmployeeDTODataTable()
        {
            List<DadosEmployeeDTO> lstEmployeeDTO = PegarDadosEmployeeDTO();
    
            DataTable dtEmployeeDTO = new DataTable();
            DataColumn column_EmployeeID = new DataColumn("EmployeeID");      
            DataColumn column_FirstName = new DataColumn("FirstName");
            DataColumn column_LastName = new DataColumn("LastName");        
            DataColumn column_BirthDate = new DataColumn("BirthDate");
    
            //adiciona DataColumn's
            dtEmployeeDTO.Columns.Add(column_EmployeeID);
            dtEmployeeDTO.Columns.Add(column_FirstName);
            dtEmployeeDTO.Columns.Add(column_LastName);
            dtEmployeeDTO.Columns.Add(column_BirthDate);
    
            DataRow row;
    
            foreach (DadosEmployeeDTO EmployeeDTO in lstEmployeeDTO)
            {
                row = dtEmployeeDTO.NewRow();
                row[column_EmployeeID] = EmployeeDTO.EmployeeID;
                row[column_FirstName] = EmployeeDTO.FirstName;
                row[column_LastName] = EmployeeDTO.LastName;
                row[column_BirthDate] = EmployeeDTO.BirthDate;
    
                dtEmployeeDTO.Rows.Add(row);
            }
    
            return dtEmployeeDTO;
        }
    }
    

    Saída:


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    quinta-feira, 1 de março de 2012 13:11
  • Perfeito.Era exatamente oque eu queria.Muito obrigado..
    quinta-feira, 1 de março de 2012 18:44