San*_*tel 5 c# linq entity-framework
我想过滤今天,周和月的数据.
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()}
};
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
LINQ to Entities不支持指定的类型成员'DayOfYear'.
如何解决此错误,还是有其他更好的方法来解决此问题?
问题是,当 LINQ to Entities 解析 lambda 表达式并将其转换为 SQL 时,它不知道“DayOfYear”是什么,以及它如何映射到有效的 SQL。这就是DbFunctions( v6 之前的 EF 中的EntityFunctions)发挥作用的地方,它允许您在 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() }
Run Code Online (Sandbox Code Playgroud)
TruncateTime 删除日期中的时间部分,DiffDays(d1, d2) 给出 2 天之间的差值 (d2 - d1)。