繁体   English   中英

如何在Linq上周分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM