LINQ to Entities查詢使用Sum對子對象屬性的問題

.net c# entity-framework linq orm

鑑於此查詢:

from s in services
select new
{
    s.Id,
    s.DateTime,
    Class = s.Class.Name,
    s.Location,
    s.Price,
    HeadCount = s.Reservations.Sum(r => r.PartySize), // problem here. r.PartySize is int
    s.MaxSeats
}

如果服務沒有任何保留,則拋出此異常:

System.InvalidOperationException:轉換為值類型“Int32”失敗,因為實現值為null。結果類型的泛型參數或查詢必須使用可空類型。

我明白了,但我應該怎麼處理呢?我的意圖是如果沒有預訂,則將HeadCount分配為0。

一般承認的答案

你應該檢查一下:

HeadCount = s.Reservations != null ? s.Reservations.Sum(r => r.PartySize) : 0,

熱門答案

有一個更簡單的解決方案:

from s in services
select new
{
    s.Id,
    s.DateTime,
    Class = s.Class.Name,
    s.Location,
    s.Price,
    HeadCount = (int?)s.Reservations.Sum(r => r.PartySize), 
    s.MaxSeats
}

注意演員。這也可能比@ Ahmad的建議產生更簡單的SQL。

從本質上講,你只是在幫助推斷類型推理。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因