首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在使用CopyToDataTable() LINQ扩展方法时返回空值

如何在使用CopyToDataTable() LINQ扩展方法时返回空值
EN

Stack Overflow用户
提问于 2017-09-03 12:06:44
回答 1查看 1.2K关注 0票数 0

如果在执行查询后没有任何元素,则我正在尝试返回空值,我使用的是DefaultIfEmpty()方法,但它并不阻止抛出该异常:

引发的异常:“System.InvalidOperationException”在System.Data.DataSetExtensions.dll中 附加信息:源包含一个为null的DataRow引用。

我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
DataTable filtered = dt.AsEnumerable()
                       .Where(x => x.Field<string>("SLA") == "Valid" 
                                   && x.Field<string>("Status") == "Finished")
                       .Select(y => y)
                       .DefaultIfEmpty()
                       .CopyToDataTable();

如何将空值返回到filtered数据表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-03 12:15:06

DefaultIfEmpty返回带有默认值‘’项的初始化集合,而不是按需要返回null

如果序列为空,则返回指定序列的元素或单例集合中类型参数的默认值。

相反,您可以做的是检查项目的数量:

代码语言:javascript
代码运行次数:0
运行
复制
DataTable filtered = dt.AsEnumerable()
                       .Where(x => x.Field<string>("SLA") == "Valid" 
                                   && x.Field<string>("Status") == "Finished")
                       .Select(y => y)
                       .CopyToDataTable();

if(filtered.Rows.Count == 0)
{
    filtered = null;
}

或更好:

代码语言:javascript
代码运行次数:0
运行
复制
var collection = dt.AsEnumerable()
                   .Where(x => x.Field<string>("SLA") == "Valid" 
                               && x.Field<string>("Status") == "Finished")
                   .Select(y => y);
DataTable filtered = collection.Any() ? collection.CopyToDataTable() : null;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46023291

复制
相关文章

相似问题

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