0

我已将 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 为空时,抛出异常“值不能为空”。它在 .NET 3.5 中运行良好。如何在 .NET 4 中避免此错误,使代码更改最少?是否有任何设置我可以切换,以便当 resultSet 值为 null 时,不进行任何查询,而不会引发异常?

问题是我有成千上万的陈述,如上面的陈述。如果我必须用“if resultsSet != null”检查它们中的每一个,这将是一个困难的解决方案。在 .NET 3.5 版中,对空结果集的查询只是返回空值。我可以为 .NET 4 做同样的事情吗?

4

3 回答 3

2

I'm pretty sure that if the resultset was null in .NET 3.5 it would throw an exception as well. LINQ is syntactic sugar on a set of extension-methods. When the object is null, the extension-methods aren't available. You should evaluate the changes in your DAL. If, for example, you are using LINQ to SQL, there might be some changes that apply to you: http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40.

于 2014-01-24T11:30:07.960 回答
0

让我们调用一个方法null

public static IEnumerable<TEntity> EmptySetIfNull( this IEnumerable<TEntity> enumerable )
{
    if( null == enumerable )
    {
        return new TEntity[] { };
    }

    return enumerable;
} 

用法:

IEnumerable<ClassA> resultSet = null;

var orderedResult = from d in resultSet.EmptySetIfNull()
                     orderby d.ID descending
                     select d;
于 2014-01-24T11:29:01.040 回答
0
if(resultSet != null)
{
    //perform your action here
}
于 2014-01-24T05:01:43.800 回答