【发布时间】:2017-07-04 10:47:12
【问题描述】:
我的代码严重依赖 ISO 日历周;它的持久层是使用 Entity Framework 6 完成的。
在 C# 中,我为 DateTime 添加了一个扩展方法:
// From https://stackoverflow.com/a/11155102/112964
public static int IsoWeek(this DateTime self) {
var day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(self);
if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
{
self = self.AddDays(3);
}
// Return the week of our adjusted day
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(self, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
我希望此扩展方法也能在 IQueryables 中工作,并将其映射到 SQL Server 函数 DATEPART(iso_week, self)。
这意味着我想调用DATEPART,第一个参数总是 'iso_week'。第二个参数应该是传递给 C# 方法的DateTime。据我了解,DbFunctionAttribute 仅在两个参数都是函数的参数时才有效。
是否可以执行这样的映射,或者我是否需要创建一个调用DATEPART(iso_week, @param) 的存储过程并调用该过程?
【问题讨论】:
-
不确定我是否理解有关常量参数的部分。这有帮助吗? stackoverflow.com/a/29539227/1236044
-
@jbl 您链接的答案是如何将
DbFunctionAttribute与所有参数都传递给SQL 的函数一起使用。我没有看到它像我想要的那样向 SQL 函数添加了一个固定参数。
标签: c# sql-server entity-framework