2014-01-24 211 views
0

我已經將.NET窗體應用程序從.net 3.5轉換爲.net 4.我使用Linq來操作數據。現在我對Linq有一些問題,因爲在新版本中,當試圖對空結果集進行查詢時會引發異常。例如(結果集類型System.Linq.IQueryable <>的):轉換Windows窗體應用程序從.NET 3.5到.NET 4

var orderedResult = from d in resultSet 
        orderby d.ID descending 
        select d; 

,則拋出異常「值不能爲空」時ResultSet是空。它在.NET 3.5中工作正常。我如何避免.NET 4中的這些錯誤,在代碼中做最少的更改?有沒有我可以切換的設置,以便當resultSet值爲null時,沒有任何查詢完成,而不會拋出異常?

問題是我有成千上萬的像上面那樣的語句。如果我必須用「如果resultsSet!= null」來檢查每個人,這將是一個困難的解決方案。 在.NET版本3.5查詢結果空結果集剛剛返回null。我可以使它與.NET 4一樣嗎?

+0

是的,有一個** if語句**來檢查值爲'null'或'not'.It在所有編程語言中都很常見。 –

+1

_「在.NET版本3.5查詢結果空結果集剛剛返回null」_ - 這是不正確的。 'from d in(IQueryable )null在.NET 3.5上選擇d'也會拋出一個'ArgumentNullException',表示「值不能爲空」。你不只是將框架版本從3.5更改爲4,對吧? – CodeCaster

回答

0
if(resultSet != null) 
{ 
    //perform your action here 
} 
+1

問題是,我有成千上萬的陳述,像我在第一篇文章中的陳述。如果我必須檢查它們中的每一個,如果resultsSet!= null,這將是困難的解決方案。 在.NET版本3.5查詢null結果集剛剛返回null。我可以使它與.NET 4一樣嗎? – user3230553

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

我敢肯定,如果ResultSet中.NET 3.5的null它會拋出一個異常,以及。 LINQ是一組擴展方法中的語法糖。當對象是null時,擴展方法不可用。您應該評估DAL中的更改。例如,如果您正在使用LINQ to SQL,則可能會有一些適用於您的更改:http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40

相關問題