簡體   English   中英

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

[英]Problem with LINQ to Entities query using Sum on child object property

鑒於此查詢:

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。

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

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。

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

你應該檢查一下:

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

這應該可以解決您的問題:嘗試將int花費到int?

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

一個簡單的三元運算符應該很好地解決問題...

這樣的事情:

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

這將處理null和empty情況

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM