与Linq一起使用时,网格视图错误数据不包含行

本文关键字:视图 网格 错误数据 包含行 Linq 一起 | 更新日期: 2023-09-27 18:26:14

我有一个Linq语句,它过滤事务。当它过滤时,它工作得很好,但我在dt中得到了一个错误。当没有返回任何内容时,使用AsEnumerable()。

错误为"数据不包含行"。有人知道在什么都没有归还的情况下如何处理吗?

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

与Linq一起使用时,网格视图错误数据不包含行

如果输入序列为空,则不能使用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序列为null,无法创建新表
  • InvalidOperationException
    • 源序列中的DataRow的状态为Deleted
    • 源序列不包含任何DataRow对象
    • 源序列中的DataRow为null

在调用AsEnumerable() 之前,检查您的DataTable是否有任何行

    if (dt.Rows.Count > 0)
    {
      newDataTable = dt.AsEnumerable()
                    .Where(r => !ListLinkedIds.Contains(r.Field<int>("LinkedTicketId")))
                    .CopyToDataTable();  
      gvMain.DataSource = newDataTable;
      gvMain.DataBind();
    }
    else {
    //error
    }