1

我的数据库中有一个 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;

那么我还需要做什么,如何使这段代码工作,我被困在这里,我该怎么做?

4

2 回答 2

2

您不能按过去 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 属性只是时间的日期部分。我们捕捉到午夜并按一周中的逻辑天数进行过滤,而不是按小时。这将为您提供更可口的结果,但可以随意更改它。

于 2013-09-26T12:34:19.700 回答
0

要仅选择上周的行,您可以where在 linq 语句中添加一个子句,例如

where p.iddatetime > (DateTime.Today - TimeSpan.FromDays(7))
于 2013-09-26T12:49:46.920 回答