关于sql server:使用LINQ在左连接表中的特定列求和时排除空值

Exclude null values while summation by specific column in a left joined table using LINQ

关于这个问题,我已经读了一些答案,但我认为它们不能解决我的问题。如果有人能给我指一个相关的,我会很高兴的。考虑下表:

enter image description here

预订可以收取不同的费用,每个预订可以收取多个费用,也可以不收取任何费用。每项收费都有自己的费率(美元)。因此,例如,预订的车辆可以收取200美元的迟到费用,而另一项不显示的费用则是450美元。这些费率可能因每次预订而有所不同,并非所有预订都有收费。

现在我要显示预订的总费用(如果有)。为此,我有以下LINQ查询:

1
2
3
4
5
6
Dim q = (From b In _db.Bookings
           Select New With {
                .Bid = b.ID,
                <some other columns from booking table>
                .TotalCharges = b.BookingCharges.Sum(Function(o) o.Rate)
           }).ToList()

查询返回错误:

"强制转换为值类型"System.Int32"失败,因为物化值为空。结果类型的泛型参数或查询必须使用可为空的类型。"

因为存在没有任何费用的预订(空),因此不能求和。我试过使用.TotalCharges = b.BookingCharges.DefaultIfEmpty().Sum(Function(o) o.Rate).TotalCharges = b.BookingCharges.Sum(Function(o) o.Rate or 0),但同样的错误。我已经阅读了与此错误相关的答案,但我觉得OP有一个与我不同的问题或查询,而且答案都是C。


(P)Try using the(……)operator:(p)字母名称(P)如果没有工作,也许有一些事情是这样的:(p)字母名称


(P)我找到了解决办法Applied if on whole new column not just on the specific column in the joining table(EDOCX1,English 0 column)because the null is not originated from the EDOCX1 individual 0 column,it is originating from an empty EDOCX1 indicative 2 commercial record against a EDOCX1EFE(Coaelescence).(p)(P)字母名称(p)(P)Thanks to Namrehs and this so answer.(p)