C# 在linq中使用groupby时如何进行多个联接
我的数据库中有一张图表。对于每个新的评级,将创建一个新的图片评级表行。我将这些评级按上周和pictureid进行分组,这意味着上周一张图片的所有评级都将被累加并成为一个评级。然后我将能够按它们的计数对它们进行排序 这是我的桌子:C# 在linq中使用groupby时如何进行多个联接,c#,sql,asp.net-mvc,linq,lambda,C#,Sql,Asp.net Mvc,Linq,Lambda,我的数据库中有一张图表。对于每个新的评级,将创建一个新的图片评级表行。我将这些评级按上周和pictureid进行分组,这意味着上周一张图片的所有评级都将被累加并成为一个评级。然后我将能够按它们的计数对它们进行排序 这是我的桌子: public partial class picturerating { public int idpicturerating { get; set; } public int idpictures { get; set; } public
public partial class picturerating
{
public int idpicturerating { get; set; }
public int idpictures { get; set; }
public int iduser { get; set; }
public System.DateTime iddatetime { get; set; }
public int iduserratedby { get; set; }
public int rating { get; set; }
}
这是我执行此操作的代码:
public IQueryable<SortedDto> GetRatignsAndTheirDetails()
{
var pastDate = DateTime.Now.Date.AddDays(-7);
var combo = from p in db.picturerating
where p.iddatetime > pastDate
group p by p.idpictures into pgroup
let count = pgroup.Count()
orderby count descending
select new SortedDto
{
IdPictures = pgroup.FirstOrDefault().idpictures,
IdPicturerating = pgroup.FirstOrDefault().idpicturerating,
IdUser = pgroup.FirstOrDefault().iduser,
IdDatetime = pgroup.FirstOrDefault().iddatetime,
IdUserratedBy = pgroup.FirstOrDefault().iduserratedby,
};
return combo;
}
我做得对吗?方法是什么?如何更改上面的代码,使其根据我的需要正常工作 那么什么不能正常工作呢?第三个代码中的连接,我写它们只是为了给你一个想法,这是我应该连接的方式吗?
var pastDate = DateTime.Now.Date.AddDays(-1);
var combo = from p in db.picturedetails
join u in db.users on p.iduser equals u.iduser
join l in db.pictureratings where l.iddatetime > pastDate group l by l.idpictures into pgroup
let count = pgroup.Count()
orderby count descending
select new SortedDto
{
IdPictures = pgroup.FirstOrDefault().idpictures,
IdPictureRating = pgroup.FirstOrDefault().idpicturerating,
IdUser = pgroup.FirstOrDefault().iduser,
IdDatetime = pgroup.FirstOrDefault().iddatetime,
IdUserRatedBy = pgroup.FirstOrDefault().iduserrateddby,
username=u.username,
dob=u.dob,
sex=u.sex,
totalrating = pl.Average(l => (float?)l.rating)?? 0 , // pl.Where(a => a.ratenumber!= null).Average(c => c.ratenumber)
};
return combo;