从Linq到实体查询的DateTime值中提取周数

本文关键字:提取 周数 DateTime Linq 实体 查询 | 更新日期: 2023-09-27 17:50:46

在下面的查询中,我得到以下异常:

LINQ到实体不能识别Int32方法GetWeekOfYear(系统。DateTime, System.Globalization.CalendarWeekRuleSystem.DayOfWeek)’方法,并且该方法不能转换为存储表达式。

查询:

        var query = db.Cases
            .Where(c => c.UserID == userId
                && ( string.IsNullOrEmpty( dateInterval ) || dateInterval.Equals( ControlValues.Today )? 
                    DbFunctions.TruncateTime( c.EffectiveDate ).Value.Day == currentDayNum :
                    dateInterval.Equals(ControlValues.CurrentWeek) ?
                        CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(
                            DbFunctions.TruncateTime( c.EffectiveDate ).Value, CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday)  == currentWeekNum :
                            dateInterval.Equals(ControlValues.NextWeek) ?
                                CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(
                                    DbFunctions.AddDays( DbFunctions.TruncateTime(c.EffectiveDate), 7 ).Value, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday ) == nextWeekNum :
                                        dateInterval.Equals(ControlValues.CurrentMonth) ?
                                            DbFunctions.TruncateTime(c.EffectiveDate).Value.Month == currentMonthNum :
                                            true)

问题简而言之,是否有一种方法可以从linq查询中的数据库值中提取年数的星期?

从Linq到实体查询的DateTime值中提取周数

使用SqlFunctions.DatePart静态方法。生成的SQL查询将转换为DATEPART SQL函数调用:

SqlFunctions.DatePart Method

返回一个整数,表示指定日期的指定日期部分。

该函数被转换为数据库。有关相应SQL Server函数的信息,请参见参见DATEPART (Transact-SQL)。

"week"为参数获取周数