Usuário com melhor resposta
Retornando DataTable a partir de um Linq Entity

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...
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.- Marcado como Resposta Rafael desenvolvedor quinta-feira, 1 de março de 2012 18:44
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. -
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.- Marcado como Resposta Rafael desenvolvedor quinta-feira, 1 de março de 2012 18:44
-