Tôi cần lưu trữ dữ liệu được trả về từ truy vấn LINQ to Entities (bên dưới) vào DataTable để tôi có thể sử dụng nó làm nguồn dữ liệu cho DataGridView, làm cách nào để thực hiện điều đó?Truy vấn LINQ to Entities vào DataTable
Trong trường hợp này, tôi đang sử dụng LINQ to Entities để truy vấn mô hình khái niệm khung thực thể, vì vậy db
là một lớp kế thừa từ System.Data.Entity.DbContext
.
using (TccContext db = new TccContext())
{
var query = from vendedor in db.Vendedores.AsEnumerable()
where vendedor.codigo == Convert.ToInt32(textBoxPesquisa.Text)
select vendedor;
// I'd like to do something like DataTable dt = query;
}
Tôi đã cố gắng thực hiện điều này (bên dưới), nhưng nó ném ngoại lệ trong khi thực thi [1].
using (TccContext db = new TccContext())
{
IEnumerable<DataRow> query = (IEnumerable<DataRow>)(from vendedor in db.Vendedores.AsEnumerable()
where vendedor.codigo == Convert.ToInt32(textBoxPesquisa.Text)
select vendedor);
using (DataTable dt = query.CopyToDataTable<DataRow>())
{
this.dataGridViewProcura.Rows.Add(
dt.Rows[0][0], // Código
dt.Rows[0][1], // Nome
dt.Rows[0][2]); // Venda Mensal
}
}
[1]: Ngoại lệ: InvalidCastException
Unable to cast object of type 'WhereEnumerableIterator`1[Projeto_TCC.Models.Vendedor]' to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
Cảm ơn trước
Phương thức CopyToDataTable sẽ không có sẵn trong 'truy vấn' nếu tôi sử dụng nó như thế. Xin lưu ý rằng tôi đang sử dụng Entity Framework. – Zignd
Tôi đã thực hiện lỗi đánh máy trên nguồn cuối cùng và khi chỉnh sửa cho biết, phương thức CopyToDataTable sẽ hoạt động ở đó. btw - Câu trả lời có giúp ích gì không? –
Như bạn có thể thấy trong cùng một liên kết, để truy cập vào phương thức CopyToDataTable, kiểu T trong IEnumerable phải thuộc kiểu DataRow, nhưng thay vào đó bạn sử dụng lớp đại diện cho bảng cơ sở dữ liệu Vendedor, tôi không có quyền truy cập vào các phương thức mở rộng đó bao gồm CopyToDataTable. –
Zignd