2013-09-26 83 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