我的数据库中有一张picturelikes表。对于每个人来说,都会创建一个像表格一样的新图片。我想在上周和图片中对那些喜欢进行分组,这意味着上周一张单张照片的所有喜欢都应该累积并变成一个喜欢。然后我就能按照他们的数量对它们进行排序。
这是我的图片表:
public partial class picturelike
{
public int idpicturelike { get; set; }
public int idpictures { get; set; }
public int iduser { get; set; }
public System.DateTime iddatetime { get; set; }
public int iduserlikedby { get; set; }
public int likenumber { get; set; }
}
直到现在我能够编写这段代码,这是我使用linq的web api控制器代码。
var combo = from p in db.picturelikes
group p by new {p.iddatetime, p.idpictures } into pgroup
let count = pgroup.Count()
orderby count descending
select new SortedDto
{
IdPictures=pgroup.FirstOrDefault().idpictures,
IdPictureLike = pgroup.FirstOrDefault().idpicturelike,
IdUser = pgroup.FirstOrDefault().iduser,
IdDatetime = pgroup.FirstOrDefault().iddatetime,
IdUserLikedBy = pgroup.FirstOrDefault().iduserlikedby,
LikeNumber = pgroup.FirstOrDefault().likenumber
};
return combo;
那么我需要做什么,如何使这段代码正常工作,我被困在这里,我应该怎么做?
答案 0 :(得分:2)
您不能在过去七天内分组。您必须先过滤(where
),然后再分组:
var pastDate= DateTime.Now.Date.AddDays(-7);
var combo = from p in db.picturelikes
where p.iddatetime.Date > pastDate
group p by p.iddatetime.Date into pgroup
let count = pgroup.Count()
orderby count descending
select new SortedDto
{
IdPictures=pgroup.FirstOrDefault().idpictures,
IdPictureLike = pgroup.FirstOrDefault().idpicturelike,
IdUser = pgroup.FirstOrDefault().iduser,
IdDatetime = pgroup.FirstOrDefault().iddatetime,
IdUserLikedBy = pgroup.FirstOrDefault().iduserlikedby,
LikeNumber = pgroup.FirstOrDefault().likenumber
};
return combo;
对这一行的解释:
where p.iddatetime.Date > DateTime.Now.Date.AddDays(-7)
Date属性只是时间的日期组件。我们捕捉到午夜并按照一周的逻辑日过滤,而不是按小时过滤。这会给你更好的结果,但随时可以改变它。
答案 1 :(得分:0)
要仅选择上周的行,可以在linq语句中添加where
子句,例如
where p.iddatetime > (DateTime.Today - TimeSpan.FromDays(7))