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;
}
该错误表示缺少一个或多个请求的字段。 这可能是由于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
要过滤的表达式