2015-02-04 19 views
13
DataTable dt = ds.Tables[4].AsEnumerable() 
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date) 
    .CopyToDataTable(); 

ds.Tables[4] có hàng nhưng nó ném ngoại lệNguồn không chứa DataRows

"Nguồn không chứa DataRows."

Bất kỳ ý tưởng nào về cách xử lý hoặc loại bỏ ngoại lệ này?

+0

Chỉ để đảm bảo, bạn chỉ muốn mục nhập cho ngày hôm nay hoặc một số ngày trong tương lai? – ryanyuyu

+0

nó xảy ra vì không có hồ sơ phù hợp hoặc điền đầy đủ các điều kiện truy vấn và kết quả là null vì vậy ở đây im cố gắng để sao chép null để datatable ... – Mike

+0

khi bạn đang cư DataTable bạn có thể không thay đổi truy vấn liên quan đến sql sử dụng để cư trú DataTable ban đầu ..? cũng là những gì nếu bạn đã thay đổi biểu thức labda thành một truy vấn LINQ .. bạn có nghĩ về điều đó cũng như https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable%28v=vs .110% 29.aspx || https://msdn.microsoft.com/en-us/library/bb386921%28v=vs.110%29.aspx || http://forums.asp.net/t/1557426.aspx?query+CopyToDataTable+does+not+work+when+select+new+is+used – MethodMan

Trả lời

21

ds.Tables[4] có thể, nhưng kết quả của truy vấn LINQ của bạn có thể không, có khả năng là trường hợp ngoại lệ bị ném. Tách chuỗi phương thức của bạn để sử dụng các thông số tạm thời để bạn có thể chết một số nơi xảy ra lỗi. Nó cũng sẽ giúp bạn kiểm tra các hàng hiện có trước khi bạn gọi tới số CopyToDataTable()tránh ngoại lệ.

Something như

DataTable dt = null; 
var rows = ds.Tables[4].AsEnumerable() 
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date); 

if (rows.Any()) 
    dt = rows.CopyToDataTable(); 

Một lựa chọn khác là sử dụng ImportRow chức năng trên một tách DataTable

DataTable dt = ds.Tables[4].Clone(); 
var rows = ds.Tables[4].AsEnumerable() 
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date); 

foreach (var row in rows) 
    dt.ImportRow(row); 
+0

diễn ra vì không có bản ghi nào khớp hoặc điền đầy đủ điều kiện truy vấn và kết quả là null vì vậy ở đây im cố gắng để sao chép null để datatable. – Mike

+0

@ Giống như tôi đã nói - tách chuỗi phương pháp của bạn và kiểm tra kết quả tạm thời của bạn là một cách để đi. Nhận xét về câu hỏi của bạn đã gợi ý một câu hỏi khác. –

+0

đã thử cùng một lỗi này – Mike

3

Đơn giản chỉ cần trong hai dòng

var rowSources = ds.Tables[4].AsEnumerable() 
      .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date); 
if(rowSources.Any()) 
{ 
    DataTable dt = rowSources.CopyToDataTable(); 
    ... code that deals with the datatable object 
} 
else 
{ 
    ... error message ? 
} 

này cho phép kiểm tra nếu kết quả chứa bất kỳ DataRow nào, nếu có thì bạn có thể gọi Copy Phương thức ToDataTable.

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