Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用常量参数在实体框架中映射SQL函数_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 使用常量参数在实体框架中映射SQL函数

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

我的代码严重依赖于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 >= 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) {
    …
}