错误LINQ查询用时平均(Error in linq query when using averag

2019-10-18 17:05发布

我有两个表, picturepictureratings在我的数据库。

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一行将被创建。 我想组pictureratings由图片ID表再算上喜欢。 我想告诉那些喜欢picturetotalrating财产。

所以,按我现在我能写出下面的代码

 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一样的属性iduserpicTitlepicFilenamepictimenuditylevelfakeslevel

按照现在的每一件事情运行平稳,但是当我添加totalrating = pl.Average(C => c.likenumber),我得到一个异常说

演员阵容价值型“双师型”失败,因为物化值为null。 无论是结果型的泛型参数或查询必须使用可空类型。

如何去除错误?

Answer 1:

也许问题是,PL没有记录,尝试

更换

totalrating = pl.Average(c => c.likenumber) // This line is causing error

totalrating = pl.DefaulIfEmpty(0).Average(c => c.likenumber) 


Answer 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)

:编辑我觉得。平均返回在这种情况下可能为空的小数。 将其分配给你的领域,简单地说

totalrating = pl.Average(c => c.likenumber) 

Totalrating似乎是一个int,eigther你会铸造它归结为一个int宽松一些信息,或者你改变翻番类型...



Answer 3:

错误似乎是您的数据库具有可包含一列null值,但你的对象有一个非空的double类型。

如果你选择的,而不是具体的一个匿名类型,是否运行查询?

即。 改变这种

select new LikesandPictureDetails

select new 

如果是这样,那么你应该改变一个值的类型,你的目标对象为空。



文章来源: Error in linq query when using average