Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用平均值时linq查询出错_C#_Sql_Asp.net Mvc_Linq_Lambda - Fatal编程技术网

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