C# 使用平均值时linq查询出错
我的数据库中有两个表,C# 使用平均值时linq查询出错,c#,sql,asp.net-mvc,linq,lambda,C#,Sql,Asp.net Mvc,Linq,Lambda,我的数据库中有两个表,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.DateTim
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; }
}
对于每个评级,将创建一个新的图片
行。我想根据图片id对图片处理
表进行分组,然后计算喜欢的图片。我想在totalrating
属性的picture
表中显示这些喜欢的内容
因此,根据我的建议,我现在能够编写以下代码
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
正如现在一样,所有的事情都运行得很顺利,但是当我添加totalrating=pl.Average(c=>c.likumber)时,我得到一个异常,说
转换为值类型“Double”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型
如何删除该错误?错误似乎是您的数据库中有一列可以包含
null
值,但您的对象有一个不可为null的double
类型
如果选择匿名类型而不是具体类型,是否会运行查询
改变这个
select new LikesandPictureDetails
到
如果是这样,那么您应该将目标对象中的值类型更改为可为空。错误似乎是您的DB有一列可以包含
null
值,但您的对象有一个不可为空的double
类型
如果选择匿名类型而不是具体类型,是否会运行查询
改变这个
select new LikesandPictureDetails
到
如果是这样,那么您应该将目标对象中的值类型更改为可为空。db.picturelikes.likumber似乎可为空?但找不到代码中定义的属性。 无论如何,您可以通过放置
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似乎是一个整数,如果将其向下转换为整数,则会丢失一些信息,或者将类型更改为double…db.picturelikes.likumber似乎可以为空?但找不到代码中定义的属性。 无论如何,您可以通过放置
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…可能问题是pl没有记录,请尝试 替换
totalrating = pl.Average(c => c.likenumber) // This line is causing error
与
也许问题是pl没有记录,试试看 替换
totalrating = pl.Average(c => c.likenumber) // This line is causing error
与
两个的可能重复都不起作用。Hasvalue选项在intellisense中不匹配。likenumber是哪种类型?Dbnull给出Errr:Operator'!='无法应用于“int”和“System.DBNull”Ah类型的操作数。Average返回可为空的十进制数。简单地说,Value,pl.Average(c=>c.likumber).Value两者都不起作用。Hasvalue选项在intellisense中不匹配。likenumber是哪种类型?Dbnull给出Errr:Operator'!='无法应用于“int”和“System.DBNull”Ah类型的操作数。Average返回可为空的十进制数。简单地说就是.Value,pl.Average(c=>c.likumber).Value