【发布时间】:2014-01-24 04:47:22
【问题描述】:
我已将 Windows 窗体应用程序从 .net 3.5 转换为 .net 4。我正在使用 Linq 处理数据。现在我对 Linq 有一些问题,因为在新版本中,它在尝试对空结果集进行查询时会引发异常。例如(resultSet 的类型是 System.Linq.IQueryable):
var orderedResult = from d in resultSet
orderby d.ID descending
select d;
resultSet 为 null 时抛出异常“Value can not be null”。它在 .NET 3.5 中运行良好。如何在 .NET 4 中避免此错误,使代码更改最少?有没有可以切换的设置,让resultSet值为null时,不做任何查询,不抛出异常?
问题是我有成千上万个类似上面的语句。如果我必须用“if resultsSet != null”检查它们中的每一个,这将是一个困难的解决方案。 在 .NET 3.5 版中,对空结果集的查询只是返回空值。我可以为 .NET 4 做同样的事情吗?
【问题讨论】:
-
是的,有一个if语句来检查值是
null或not。在所有编程语言中都很常见。 -
" 在 .NET 3.5 版中,对 null 结果集的查询只是返回 null" - 这是不正确的。 .NET 3.5 上的
from d in (IQueryable<string>)null select d也会抛出ArgumentNullException说“值不能为空”。您不只是将框架版本从 3.5 更改为 4,对吧?