首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DataTable RowFilter避免源不包含数据行异常

DataTable RowFilter避免源不包含数据行异常
EN

Stack Overflow用户
提问于 2012-02-19 21:07:53
回答 2查看 7.9K关注 0票数 0

我正在使用以下代码来获取过滤后的DataTable

代码语言:javascript
复制
DT = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF").CopyToDataTable(); 

这段代码给出了错误

代码语言:javascript
复制
Source contains no data rows

哪一项是正确的并且实际上没有数据

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

我能做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2012-02-19 21:14:16

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

代码语言:javascript
复制
var Rows = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF");

现在使用这些行检查数据是否在那里

代码语言:javascript
复制
if(Rows.Count()>0)
{
   DataTable dt = Rows.CopyToDataTable(); 
}
票数 0
EN

Stack Overflow用户

发布于 2012-02-19 21:16:49

这个问题似乎在4.0中被修复了,尽管它没有被标记出来。

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

在4.0上进行一次快速测试,结果与预期一致:

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9349408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档