[英]How to group by last week in linq
我的数据库中有一个picturelikes表。 对于每一个像一张新图片一样的表格行将被创建。 我想按上周和图片ID对这些喜欢进行分组,这意味着上周一张图片的所有喜欢都应该被累加并成为一个喜欢。然后,我将能够按自己的数量对其进行排序。
这是我的头像表:
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;
所以我还需要做些什么,如何使此代码正常工作,我被困在这里,应该怎么做?
您无法按最近7天分组。 您必须先过滤( 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属性只是时间的日期部分。 我们跳到午夜,然后按照一周中的逻辑日期而不是小时进行过滤。 这将为您提供更可口的结果,但可以随时对其进行更改。
要仅选择上周的行,可以where
linq语句中添加where
子句,例如
where p.iddatetime > (DateTime.Today - TimeSpan.FromDays(7))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.