我的数据库中有两个表picture
和pictureratings
。
public partial class picture
{
public int idpicture { get; set; }
public int iduser { get; set; }
public string picTitle { get; set; }
public string picFilename { get; set; }
public System.DateTime pictime { get; set; }
public int nuditylevel { get; set; }
public int fakeslevel { get; set; }
// This property will hold the total accumulated/summed
// up rating of a picture
public int totalrating { get; set; }
}
public partial class pictureratings
{
public int idrating { get; set; }
public int idpictures { get; set; }
public int iduser { get; set; }
public System.DateTime iddatetime { get; set; }
public int iduserrateddby { get; set; }
public int rating { get; set; }
}
对于每个评级,都会创建一个新的pictureratings
行。我想按照图片ID对pictureratings
表进行分组,然后对喜欢的内容进行计数。我想在picture
属性的totalrating
表中显示那些喜欢的内容。
所以我现在可以编写以下代码
var combo = from p in db.picturedetails
join l in db.picturelikes on p.idpictures equals l.idpictures into pl
select new LikesandPictureDetails
{
IdUserPic = p.iduser,
IdPicturess =p.idpictures,
Likes = p.likes,
NudityLevel = p.nuditylevel,
PicTitle = p.picTitle,
PicTime = p.pictime,
picFilename=p.picFilename,
Count=pl.Count(),
totalrating = pl.Average(c => c.likenumber) // This line is causing error
};
我使用web api返回查询总数。我正在展示picture
,iduser
,picTitle
,picFilename
,pictime
和nuditylevel
等fakeslevel
属性。
目前,每件事情都顺利进行,但当我添加总计= pl.Average(c => c.likenumber)时,我得到一个例外
转换为值类型'Double'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可空类型。
如何删除错误?
答案 0 :(得分:4)
也许问题是pl没有记录,请尝试
替换
totalrating = pl.Average(c => c.likenumber) // This line is causing error
与
totalrating = pl.DefaulIfEmpty(0).Average(c => c.likenumber)
答案 1 :(得分:2)
db.picturelikes.likenumber似乎可以为空?但是找不到代码中定义的属性。 无论如何,你可以通过添加
来选择所有非空的条目pl.Where(a=>a.likenumber != DBNull.Value /* or null whatever this is... */).Average...
如果它是可以为空的属性:
pl.Where(a=>a.likenumber.HasValue).Average(a=>a.likenumber.Value)
:编辑 我认为.average在这种情况下返回一个可以为空的小数。要将其分配到您的字段,只需输入
即可totalrating = pl.Average(c => c.likenumber)
Totalrating似乎是一个int,通过将它转换为int来丢弃一些信息,或者你将类型更改为double ...
答案 2 :(得分:1)
错误似乎是您的数据库有一个可以包含null
值的列,但您的对象具有不可为空的double
类型。
如果选择匿名类型而不是具体的类型,查询是否会运行?
即。改变这个
select new LikesandPictureDetails
到
select new
如果是这样,那么您应该将目标对象中值的类型更改为可为空。