2012-05-22 44 views
2

當使用Linq中的拉姆達和使用下面的代碼到SQL:LINQ的2 SQL總和拉姆達和處理空值

int query = (from f in odc.RDetails 
        where f.ticketID == int.Parse(ticket.ToString()) 
        select f).Sum(x => x.Rate); 



我收到以下錯誤:

空值不能被分配給類型爲System.Int32的成員,這是一個非空值類型。

回答

2

。您必須確保x.Rateint,而不是int?(接受null作爲值的int)。

。如果查詢沒有元素,則.Sum將不會執行任何操作並將返回null。選擇一個默認值,假設0

var query = from f in odc.RDetails 
      where f.ticketID == int.Parse(ticket.ToString()) 
      select f; 

int result = query.Any() 
      ? query.Sum(x => x.Rate ?? 0) // use the ?? if x.Rate is an "int?". 
      : 0; // default value you can choose. 
+0

我收到運營商?不能應用於int和int類型的操作數 – InCode

+0

檢查編輯的答案。現在'結果'將持有這筆錢! –

+0

在測試查詢中的無效性之後,也可以調用'.Sum'。新編輯... –

0

我會打破int.Parse(ticket.ToString())到自己的線上,以隔離Linq進行調試的解析。

我們不知道這是拋出異常還是RDetails.Rate值之一爲空。這確實是一個Nullable<int>

如果RDetails.RateNullable<int>,那麼你可以...Sum(x => x.Rate ?? 0)並避免例外。

+0

票根本不爲空.... – InCode