C# 上周在林克如何分组

C# 上周在林克如何分组,c#,sql,asp.net-mvc,linq,lambda,C#,Sql,Asp.net Mvc,Linq,Lambda,我的数据库中有一个picturelikes表。对于每个like,将创建一个新的类似图片的表格行。我想按上周和pictureid对这些喜欢的图片进行分组,这意味着上周一张图片的所有喜欢都应该累积起来,成为一个喜欢的图片。然后我将能够按它们的数量对它们进行排序 这是我的如画的桌子: public partial class picturelike { public int idpicturelike { get; set; } public int idpictures { get;

我的数据库中有一个picturelikes表。对于每个like,将创建一个新的类似图片的表格行。我想按上周和pictureid对这些喜欢的图片进行分组,这意味着上周一张图片的所有喜欢都应该累积起来,成为一个喜欢的图片。然后我将能够按它们的数量对它们进行排序

这是我的如画的桌子:

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;

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

你不能在过去七天内分组。您必须先筛选(
其中
),然后分组:

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)

日期属性是时间的日期部分。我们很快就到了午夜,按一周中合乎逻辑的几天过滤,而不是按小时过滤。这将为您提供更令人满意的结果,但您可以随意更改它。

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

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

您观察到的错误、结果、缺陷是什么?它是怎么失败的?上周,就像过去7天一样?Gusdor,它没有失败,它只是根据匹配的日期分组,我不想,我想在最后7天分组如果答案没有解决你描述的问题,那么你的问题就是垃圾。考虑修改,我不理解它。code>在过去7天内分组,你是说每天都分组,只在过去7天内分组?Gusdor这不是问题,而是做它应该做的事情。我只想在这一行中添加功能,它上周应该可以gropuby。Gusdor你能解释一下这一行中p.iddatetime.Date>DateTime.Now.Date.AddDays(-1)@Hmmmmmmmmmm-1是一个打字错误(应该是-7)。我已经修复了它并添加了一些注释。我收到了以下错误:“LINQ to Entities中不支持指定的类型成员'Date'。只支持初始值设定项、实体成员和实体导航属性。”,LINQ to Entities可以处理本地值,但不能处理本地表达式。您的代码将处理以下小更改:var pastDate=DateTime.Now.Date.AddDays(-7);将where设置为这样:where p.iddatetime>passdatewhere p.iddatetime.Date>=DateTime.Now.Date.AddDays(-7.Date)。我收到此错误LINQ to Entities无法识别方法“System.TimeSpan FromDays(Double)”方法,并且此方法无法转换为存储表达式。“,