2013-08-02 39 views
1

我有用於過濾事務的Linq語句。當它過濾時它工作正常,但是當沒有任何東西被返回時,我在dt.AsEnumerable()中出現錯誤。當與Linq一起使用時,Gridview錯誤數據不包含行

錯誤是數據不包含任何行。沒有任何回報時,任何人都知道如何處理?

 newDataTable = dt.AsEnumerable() 
        .Where(r => !ListLinkedIds.Contains(r.Field<int>("LinkedTicketId"))) 
        .CopyToDataTable(); 

     gvMain.DataSource = newDataTable; 
     gvMain.DataBind(); 
+0

檢查IEnumerable的結果調用.CopyToDataTable –

回答

3

之前有任何行如果輸入序列是空的,否則不能使用CopyToDataTable。所以,你需要檢查第一:

var newDataTable = dt.Clone(); // an empty table with the same schema 
var ticketRows = dt.AsEnumerable() 
    .Where(r => !ListLinkedIds.Contains(r.Field<int>("LinkedTicketId"))); 
if(ticketRows.Any()) 
    newDataTable = ticketRows.CopyToDataTable(); 

CopytoDataTable

  • ArgumentNullException
    源可能的例外IEnumerable的序列爲空,不能創建新表。
  • InvalidOperationException
    • 源序列中的DataRow的狀態爲Deleted。
    • 源序列不包含任何DataRow對象。
    • 源序列中的DataRow爲空。
+0

謝謝,幫助。 – Apollo

0

檢查您的通話DataTableAsEnumerable()

if (dt.Rows.Count > 0) 
    { 
     newDataTable = dt.AsEnumerable() 
        .Where(r => !ListLinkedIds.Contains(r.Field<int>("LinkedTicketId"))) 
        .CopyToDataTable(); 

     gvMain.DataSource = newDataTable; 
     gvMain.DataBind(); 
    } 
    else { 
    //error 
    } 
+1

問題之前不表,但'Where'。 –

相關問題