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

时间:2017-09-03 12:06:45

标签: c# linq

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

  

抛出异常:' System.InvalidOperationException'在   System.Data.DataSetExtensions.dll

     

附加信息:源包含DataRow引用   是空的。

我的代码:

to_internal_value

如何将null值返回DataTable filtered = dt.AsEnumerable() .Where(x => x.Field<string>("SLA") == "Valid" && x.Field<string>("Status") == "Finished") .Select(y => y) .DefaultIfEmpty() .CopyToDataTable(); 数据表?

1 个答案:

答案 0 :(得分:0)

DefaultIfEmpty根据需要返回带有默认值项而非null的初始化集合:

  

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

您可以做的只是检查项目数量:

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;
}

或更好:

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;