Linq 查询到数据源,无效操作异常
本文关键字:无效 操作 异常 数据源 查询 Linq | 更新日期: 2023-09-27 18:32:28
我正在尝试从简单的MS Access数据库,本地文件中查询表,查询有效,但我无法将其设置为DataSoruce:
IEnumerable<DataRow> result = from row in bDSpitalDataSet.Tabel.AsEnumerable()
where row.Varsta >= up &&
row.Varsta <= down &&
row.CNP.StartsWith(Convert.ToString(sex))
select row;
DataTable resultTable = result.CopyToDataTable<DataRow>();
tabelBindingSource.DataSource = resultTable;
dataGridView1.Update();
所以我在DataTable resultTable = result.CopyToDataTable<DataRow>();
得到InvalidOperationException
操作。知道吗?
我假设[1](编辑:现在由OP确认(你不会在tabelBindingSource.DataSource = resultTable
而是在result.CopyToDataTable<DataRow>()
得到异常,因为查询不包含任何数据行。新DataTable
的列将从DataRow.Table.Columns
派生,如果没有行就没有信息。
记录了异常:
InvalidOperationException
:
- 源序列中的
DataRow
的状态为Deleted
。 -
源序列不包含任何
DataRow
对象。 - 源序列中的
DataRow
null
。
您可以使用Any
在以下之前进行检查:
if(result.Any())
{
DataTable resultTable = result.CopyToDataTable<DataRow>();
tabelBindingSource.DataSource = resultTable;
dataGridView1.Update();
}
更有效的方法:
DataTable resultTable = bDSpitalDataSet.Tabel.Clone();
foreach(DataRow row in result.Rows)
resultTable.LoadDataRow(row.ItemArray, false);
效率更高,因为result.Any()
需要执行查询以确定是否至少有一行,result.CopyToDataTable<DataRow>()
第二次执行它。
[1] 为什么我假设你提到了错误的错误行?因为您的评论:
System.Data.DataSetExtensions 中发生了类型为"System.InvalidOperationException"的未处理异常.dll