C# 使用常量参数在实体框架中映射SQL函数
我的代码严重依赖于ISO日历周;它的持久层是使用实体框架6完成的 在C#中,我为DateTime添加了一个扩展方法:C# 使用常量参数在实体框架中映射SQL函数,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我的代码严重依赖于ISO日历周;它的持久层是使用实体框架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 >= D
// 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);
}
//来自https://stackoverflow.com/a/11155102/112964
公共静态int IsoWeek(此日期时间自我){
var day=CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(self);
如果(day>=DayOfWeek.Monday&&day我找不到一个方法来做我想做的事,所以我做了以下事情:
在SQL server中创建标量值函数
CREATE FUNCTION IsoWeek(@date DATETIME)
RETURNS int
WITH EXECUTE AS CALLER
AS
BEGIN
RETURN datepart(ISO_WEEK, @date);
END
将函数导入EDMX(只需从数据库调用Update)
现在我可以使用dateTime.IsoWeek()了在C#代码以及实体Famework Linq查询中。我不确定我是否理解常数参数的部分。这有帮助吗?@jbl您链接的答案是如何将DbFunctionAttribute
与一个所有参数都传递到SQL的函数一起使用。我看不到它像我所希望的那样向SQL函数添加了一个固定参数到
<Schema Namespace="Some.Namespace" …>
…
<Function Name="IsoWeek" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo" ReturnType="int">
<Parameter Name="date" Type="datetime" Mode="In" />
</Function>
[DbFunction("Some.Namespace", "IsoWeek")]
public static int IsoWeek(this DateTime self) {
…
}