【问题标题】:filter data based on day, week and month根据日、周和月过滤数据
【发布时间】:2014-03-15 17:16:37
【问题描述】:

我想过滤今天、一周和一个月的数据。

var data = new DashboardViewModel()
           {
               Today = new State() { Download = db.Download.Where(x => x.Time == DateTime.Today).Count(), Visit = db.Visit.Where(x => x.Time == DateTime.Today).Count() },
               Week = new State() { Download = db.Download.Where(x => x.Time.DayOfYear <= Day && x.Time.DayOfYear >= Day - 7).Count(), Visit = db.Visit.Where(x => x.Time.DayOfYear <= Day && x.Time.DayOfYear >= Day - 7).Count() },
               Month = new State() { Download = db.Download.Where(x => x.Time.DayOfYear <= Day && x.Time.DayOfYear >= Day - 30).Count(), Visit = db.Visit.Where(x => x.Time.DayOfYear <= Day && x.Time.DayOfYear >= Day - 30).Count() },
               Total = new State() { Download=db.Download.Count(),Visit=db.Visit.Count()}
           };

它给出了错误:

LINQ to Entities 不支持指定的类型成员“DayOfYear”。

我该如何解决这个错误,或者有没有其他更好的方法来解决这个问题?

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    问题在于,当 LINQ to Entities 解析您的 lambda 表达式并将其转换为 SQL 时,它不知道“DayOfYear”是什么,以及它如何映射到有效的 SQL。这就是DbFunctionsEntityFunctions 在 v6 之前的 EF 中)的用武之地,它允许您在 LINQ to Entities 中使用日期操作函数。例如,要按周过滤,您可以使用:

    Week = new State() { 
        Download = db.Download.Where(x => DbFunctions.DiffDays(DbFunctions.TruncateTime(x.Time), Day) <= 7).Count(), 
        Visit = db.Visit.Where(x => DbFunctions.DiffDays(DbFunctions.TruncateTime(x.Time), Day) <= 7).Count() }
    

    TruncateTime 从日期中删除时间部分,DiffDays(d1, d2) 为您提供 2 天 (d2 - d1) 之间的差异。

    【讨论】:

      【解决方案2】:

      看到这个answer

      var ruleDate = Convert.ToDateTime(rule.data).Date;
      return jobdescriptions.Where(j.Deadline.Year == ruleDate.Year 
                             && j j.Deadline.Month == ruleDate.Month 
                             && j.Deadline.Day == ruleDate.Day);
      

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 2021-11-01
        • 1970-01-01
        • 2014-11-05
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多