[英]Using Linq to Join,Group By and Count… facing a trouble
我有两个表, 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 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
出现了我的问题:如何显示iduser
, picTitle
, picFilename
, pictime
, nuditylevel
和fakeslevel
等picture
属性? 我做得对吗? 我该怎么办?
我认为小组加入是你正在寻找的:
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.