0

我收到此错误:在 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;
}
4

2 回答 2

1

该错误表明您请求的一个或多个字段缺失。这可能是由于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;

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

于 2013-09-10T14:20:33.810 回答
0

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

于 2013-09-10T14:16:24.057 回答