2012-02-19 72 views
0

IM使用下面的代碼獲取一個過濾DataTable中數據表的RowFilter避免發生源不包含任何數據行異常

DT = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF").CopyToDataTable(); 

這段代碼給我的錯誤

Source contains no data rows 

這是正確的,實際上沒有數據

我需要的是,我需要避免例外,如果沒有數據行,只是爲了返回空的DataSource。

我可以做到這一點嗎?

+0

?這似乎是在.NET 4中修復的。http://stackoverflow.com/questions/636765/how-to-deal-with-a-flaw-in-system-data-datatableextensions-copytodatatable – 2012-02-19 13:52:54

回答

0

你可以這樣做。首先你需要獲得所有的行。然後檢查回收行的數量。你可以檢查MSDN DataTable.CopyToDataTable,它有很好的解釋

var Rows = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF"); 

現在使用的行來檢查數據是否存在與否

if(Rows.Count()>0) 
{ 
    DataTable dt = Rows.CopyToDataTable(); 
} 
+0

但我沒有得到'tbl.AsEnumerable()的異常。其中(r => 1 == 2).CopyToDataTable()'。無論源DataTable是否爲空,它都將成功創建具有0行的DataTable。 – 2012-02-19 13:43:43

0

這個問題似乎是固定在4.0,雖然它沒有標明左右。

https://connect.microsoft.com/VisualStudio/feedback/details/422727/major-flaw-in-system-data-datatableextensions-copytodatatable-design

在4.0工程的快速測試如預期:

tbl.AsEnumerable().Where(r=>1==2).CopyToDataTable(); 

它將成功創建0行的DataTable與否源數據表是空的。

如果您使用的是舊版本的.NET框架,請使用它的一個重載如CopyToDataTable(IEnumerable, DataTable, LoadOption),如果源DataTable中沒有行,則不會引發異常。

或者使用這裏建議的方法之一:

How to deal with a flaw in System.Data.DataTableExtensions.CopyToDataTable()

您正在使用什麼framework版本