【问题标题】:DataTable RowFilter avoid Source contains no data rows ExceptionDataTable RowFilter 避免 Source contains no data rows 异常
【发布时间】:2012-03-10 02:26:29
【问题描述】:

我使用下面的代码来得到一个过滤的数据表

DT = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF").CopyToDataTable(); 

这段代码给了我错误

Source contains no data rows

这是正确的,实际上没有数据

我需要的是,如果没有数据行,我需要避免异常,只返回空的 DataSource。

我能做到吗?

【问题讨论】:

标签: asp.net datatable


【解决方案1】:

你可以这样做。首先,您需要获取所有行。然后检查检索行的计数。你可以查看MSDN DataTable.CopyToDataTable,它有很好的解释

var Rows = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF");

现在使用行来检查数据是否存在

if(Rows.Count()>0)
{
   DataTable dt = Rows.CopyToDataTable(); 
}

【讨论】:

  • 但是tbl.AsEnumerable().Where(r=&gt;1==2).CopyToDataTable() 没有例外。无论源DataTable是否为空,它都会成功创建一个0行的DataTable。
【解决方案2】:

这个问题似乎在 4.0 中得到了修复,虽然它没有被标记出来。

https://connect.microsoft.com/VisualStudio/feedback/details/422727/major-flaw-in-system-data-datatableextensions-copytodatatable-design

对 4.0 的快速测试按预期工作:

tbl.AsEnumerable().Where(r=>1==2).CopyToDataTable();

无论源DataTable是否为空,都会成功创建一个0行的DataTable。

如果您使用的是旧版本的 .NET 框架,请使用其重载之一,例如 CopyToDataTable(IEnumerable, DataTable, LoadOption),如果源 DataTable 中没有行,则不会引发异常。

或在此处使用建议的方法之一:

How to deal with a flaw in System.Data.DataTableExtensions.CopyToDataTable()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多