我的数据库中有两个表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返回查询总数。我的问题就出现了:如何显示picture
属性,例如iduser
,picTitle
,picFilename
,pictime
,nuditylevel
和{{1 }}?我做得对吗?我该怎么办?
答案 0 :(得分:1)
我认为你正在寻找group join:
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
。
答案 1 :(得分:1)
您可以对匿名类进行分组。这样你就可以访问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()
}