LINQ 异常处理

本文关键字:异常处理 LINQ | 更新日期: 2023-09-27 18:30:52

我收到此错误:linq 查询中 DataReport.exe 中发生了类型为"System.NullReferenceException"的未处理异常。此后我的代码。知道如何处理此异常。谢谢。

private void btnFilterBy_Click(object sender, EventArgs e)
{
    var records = 
        from record in data.AsEnumerable()
        where (record.Field<string>(data.Columns[0].ColumnName).Contains(txtBC.Text) && 
               record.Field<string>(data.Columns[1].ColumnName).Contains(txtRM.Text) &&
               record.Field<string>(data.Columns[2].ColumnName).Contains(txtClient.Text) &&
               record.Field<string>(data.Columns[4].ColumnName).Contains(txtProduct.Text) &&
               record.Field<string>(data.Columns[7].ColumnName).Contains(txtSegment.Text) &&
               record.Field<string>(data.Columns[6].ColumnName).Contains(txtMonth.Text))
        select record;
    dataQuery = records.CopyToDataTable();
    dtGridPivot.DataSource = dataQuery;
}

LINQ 异常处理

该错误表示缺少一个或多个请求的字段。 这可能是由于data对象为 null,或者缺少其中一个Columns

尝试添加类似于以下代码行的内容

if (data == null)
   throw new InvalidOperationException("Data is null");
if (data.Columns.Count < 8)
   throw new InvalidOperationException("Invalid number of columns.");
// Casting as DataColumn - but cast as whatever is approperiate
if (data.Columns.Cast<DataColumn>().Any(x => x == null || x.ColumnName == null))
    throw new InvalidOperationException("Data values are missing or null.");

var records = 
    from record in data.AsEnumerable()
    where (record.Field<string>(data.Columns[0].ColumnName).Contains(txtBC.Text) && 
           record.Field<string>(data.Columns[1].ColumnName).Contains(txtRM.Text) &&
           record.Field<string>(data.Columns[2].ColumnName).Contains(txtClient.Text) &&
           record.Field<string>(data.Columns[4].ColumnName).Contains(txtProduct.Text) &&
           record.Field<string>(data.Columns[7].ColumnName).Contains(txtSegment.Text) &&
           record.Field<string>(data.Columns[6].ColumnName).Contains(txtMonth.Text))
    select record;
dataQuery = records.CopyToDataTable();
dtGridPivot.DataSource = dataQuery;

这将确保正在加载的列值存在或引发更有意义的异常。

传统上,我使用 null coellescing 运算符??来检查集合中的 null,并在选择、分组或排序之前where要过滤的表达式