繁体   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