2012-05-16 40 views
9

Tôi đã viết truy vấn bằng cách sử dụng LINQ và tôi đã sử dụng phương thức CopyToDataTable. Tại dòng đó, nó hiển thị lỗi loại chuyển đổi ngầm từ kiểu cơ sở dữ liệu của tôi đến System.Data.DataRow.Cách chuyển đổi IQueryable thành DataTable

var query = from i in dbContext.Personaldetails 
      where i.ID == 1 
      select i; 

      return query.CopyToDataTable(); 

Mọi đề xuất?

Trả lời

5

CopyToDataTable yêu cầu thu thập các đối tượng DataRow. Xem Cách thực hiện: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow để giải quyết vấn đề này.

CẬP NHẬT: Nếu pháp nhân của bạn có trường không có giá trị, bạn có thể sửa đổi phương thức ObjectShredder.ExtendTable. Tìm nơi cột mới được thêm vào bảng, và loại bỏ tham số thứ hai, cung cấp kiểu dữ liệu trong cột (lớp DataColumn không hỗ trợ kiểu dữ liệu nullable):

foreach (PropertyInfo p in type.GetProperties()) 
{ 
    if (!_ordinalMap.ContainsKey(p.Name)) 
    { 
     DataColumn dc = table.Columns.Contains(p.Name) ? table.Columns[p.Name] 
      // do not provide column type 
      : table.Columns.Add(p.Name); 

     _ordinalMap.Add(p.Name, dc.Ordinal); 
    } 
} 
+0

tôi đã thực hiện rằng logic nhưng đồng query.copytodatatable nó đang hiển thị lỗi không thể loại chuyển đổi tiềm ẩn. – steve

+0

@nanicharan đảm bảo bạn sử dụng 'CustomLINQtoDataSetMethods', không phải từ LINQ đến tập dữ liệu. –

+0

Tôi đã sử dụng cùng một phương pháp. Tôi sẽ gửi mã code.can u của mình, vui lòng kiểm tra lại một lần. – steve

Các vấn đề liên quan