db.Projects.Select(x => new Statistic {
Posts = x.Members.Sum(m => m.Posts.Count())
})
为什么此代码会抛出异常:
转换为值类型'System.Int32'失败,因为已实现 value为null。结果类型的泛型参数或查询 必须使用可空类型。
这段代码工作正常
db.Projects.Select(x => new Statistic {
Posts = x.Members.SelectMany(m => m.Posts).Count()
})
结构直观:
项目有很多成员 会员有很多帖子。
public virtual ICollection<Post> Posts { get; set; }
编辑:最终工作代码
db.Projects.Select(x => new Statistic {
Posts = (int?)x.Members.Sum(m => m.Posts.Count()) ?? 0
})
答案 0 :(得分:4)
您的Sum
或Count()
投掷的是空。
允许Posts
类中的Statistic
可以为空,并将值转换为可为空的整数。
db.Projects
.Select(x => new Statistic
{
Posts = (int?)x.Members.Sum(m => (int?)m.Posts.Count())
})
或者使用.Value
获取值。如果计数总和仍然导致空值,.Value
方法仍会抛出异常。
db.Projects
.Select(x => new Statistic
{
Posts = x.Members.Sum(m => (int?)m.Posts.Count()).Value
})
答案 1 :(得分:1)
这是因为Members
属性可以为null。您应该添加一个检查,如果它为空,那么您的第一种方法将正常工作。
例如:
db.Projects.Select(x => new Statistic {
Posts = x.Members==null? 0 : x.Members.Sum(m => m.Posts.Count())
})