2013-09-26 50 views
1

我在我的数据库中有一个picturelikes表。对于每一个像表格行一样的新图片都将被创建。我想按照lastweek和pictureid来分组这些喜欢的人,这意味着上周一张单曲的所有喜好应该积累起来并成为一个喜欢的人。然后我可以按照他们的数量对他们进行排序。如何在linq上周进行分组

这是我picturelike表:

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

什么是您观察到的错误,结果,缺陷?它是如何失败的? – Gusdor

+0

Lastweek,和过去7天一样吗? – christiandev

+0

是的最后7天 – Obvious

回答

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) 

的日期属性只是时间的日期部分。我们在午夜时分对齐,按照一周的逻辑日期进行过滤,而不是按小时进行过滤。这会给你更可口的结果,但随时可以改变它。

+0

Gusdor它不是问题,它做它应该做的事情。我只想在这一行添加的功能,它应该能够在上周gropuby。 – Obvious

+0

@Hmmmmmmmmmm看我的编辑。 – Gusdor

+0

Gusdor可以解释这一行,其中p.iddatetime.Date> DateTime.Now.Date.AddDays(-1) – Obvious

0

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

where p.iddatetime > (DateTime.Today - TimeSpan.FromDays(7)) 
+0

其中p.iddatetime.Date> = DateTime.Now.Date.AddDays(-7).Date –

+0

我收到此错误LINQ to Entities不能识别方法'System.TimeSpan FromDays(Double)'方法,并且此方法不能被翻译成商店表达。“, – Obvious