繁体   English   中英

使用Linq加入,分组依据和计数......面临麻烦

[英]Using Linq to Join,Group By and Count… facing a trouble

我有两个表, 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行。 我想按照图片ID分组pictureratings表,然后计算喜欢。 我想在picture表中显示那些喜欢totalrating属性的人。

所以根据我的研究到现在为止,我能够编写这段代码

var total = from p in db.picturedetails
            join l in db.picturelikes on p.idpictures equals l.idpictures 
            group l by l.idpictures into g
            select new 
            {
                IdUserPic = g.First().iduser,
                IdPictures = g.First().idpictures,
                totalrating = g.Count()    
            }

我使用web api返回查询总数。 所以iduser出现了我的问题:如何显示iduserpicTitlepicFilenamepictimenuditylevelfakeslevelpicture属性? 我做得对吗? 我该怎么办?

我认为小组加入是你正在寻找的:

var total = from p in db.picturedetails
            join l in db.picturelikes on p.idpicture equals l.idpictures into pl
            select new
            {
                Picture = p,
                AverageRating = pl.Any()
                                    ? pl.Average(l => l.rating)
                                    : (double?)null,
                RatingsCount = pl.Count(),
                TotalRating = pl.Sum(l => (float?)l.likenumber) ?? 0
            };

如果图片没有喜欢,这将为该图片提供0总平均值和null平均值。

您可以对匿名类进行分组。 这样您就可以访问p&l属性。
看起来像这样:

var total = from p in db.picturedetails
            join l in db.picturelikes on p.idpictures equals l.idpictures 
            group new {p,l} by l.idpictures into g
            select new 
            {
                IdUserPic = g.First().p.iduser,
                IdPictures = g.First().p.nuditylevel,
                totalrating = g.Count()    
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM