2010-09-11 93 views
1

我試圖執行計算。我有一個包含Quantity Needed(d.QtyNeeded)的捐贈表(d.QtyNeeded),我需要通過從捐助者表中提取填充數量(qtyfilled)來確定仍需要的項目數量。並非所有捐贈都有捐助者,所以我需要一個有條件的聲明來處理空值,這樣總和纔有效。當我嘗試編譯時,出現錯誤:*運算符' - '不能應用於'int'和'bool'類型的操作數。我在Linq方面並不擅長,但我錯過了什麼或者有更好的方法?LINQ條件和計算 - 不能應用於'int'和'bool'類型的操作數

QtyOpen = d.QtyNeeded - (from dv in db.Donors 
            select dv).All(v => v.QtyFilled == null) 
            ? 0 
            : (from dv in db.Donations 
             select dv.QtyFilled).Sum() 

回答

0

問題不在於LINQ語句,而是在減法運算符中的優先級。考慮下面這個例子:

int result = quantity - true ? 0 : otherValue; 

這無法編譯的確切同樣的原因,操作「 - 」不能應用於類型「詮釋」和「布爾」的操作數。該解決方案是簡單地組中括號的條件語句:

int result = quantity - (true ? 0 : otherValue); 

所以,你應該例如通過圍繞整個條件運算符語句添加括號編譯。

+0

我嘗試這樣做,它默認爲0,即使QtyFilled查詢返回2.我可能沒有正確執行。謝謝。 QtyOpen = d.QtyNeeded - (true?0 :(從dv in db.DonationVolunteerEntities 其中dv.DonationID == d.DonationID select dv).All(v => v.QtyFilled == null) ?0 : (從dv在db.DonationVolunteerEntities 選擇dv.QtyFilled).Sum()), – scottrakes 2010-09-11 02:09:32

+0

我看到我做錯了。你的解決方案很完美。謝謝。 – scottrakes 2010-09-11 02:15:40

0

嘗試通過在選擇加入其中篩選出在初次選擇的空值:

QtyOpen = d.QtyNeeded - (from dv in db.Donors 
         where dv.QtyFilled != null 
         select dv.QtyFilled).Sum(); 
相關問題