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操作。知道吗?

Linq 查询到数据源,无效操作异常

我假设[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