Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core 使用EntityFramework Core和linq to entities在服务器端将日期与今天进行比较_Asp.net Core_Entity Framework Core - Fatal编程技术网

Asp.net core 使用EntityFramework Core和linq to entities在服务器端将日期与今天进行比较

Asp.net core 使用EntityFramework Core和linq to entities在服务器端将日期与今天进行比较,asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,我正在尝试将一些代码从EF6翻译成EFCore1RC1,但在服务器端使用linq时,我需要将日期与当前日期进行比较。查询的另一部分是获取这些日期的星期几 EF6代码使用的SqlFunctions类完全限定为System.Data.Entity.SqlServer.SqlFunctions,afaik尚未移植到新版本 建议采用什么方法或替代方法来保持EF Core的运行 原始linq to entities查询如下所示: var result = db.Logs.Select(log =>

我正在尝试将一些代码从EF6翻译成EFCore1RC1,但在服务器端使用linq时,我需要将日期与当前日期进行比较。查询的另一部分是获取这些日期的星期几

EF6代码使用的SqlFunctions类完全限定为System.Data.Entity.SqlServer.SqlFunctions,afaik尚未移植到新版本

建议采用什么方法或替代方法来保持EF Core的运行

原始linq to entities查询如下所示:

var result = db.Logs.Select(log => new {
      Date = log.Date,
      Rel = System.Data.Entity.SqlServer.SqlFunctions.DateDiff("day", log.Date, System.Data.Entity.SqlServer.SqlFunctions.GetDate()),
      Dow = System.Data.Entity.SqlServer.SqlFunctions.DatePart("dw", log.Date) - 1 
});

目前,Sql函数不受支持,这是一个公开的问题

以下是一些您可以尝试的替代方案:

  • 您可以尝试使用原始sql
  • 否则,您可以在db端创建计算列,并

可以通过使用DbFunctionAttribute包装datepart SQL函数来使用它。datediff等也可以这样做。 棘手的部分是告诉ef core不要将datepart类型参数作为字符串处理。例如:

DbContext:

公共int?DatePart(字符串datePartArg,DateTime?date)=>抛出新异常(); 模型创建时的公共无效(DbModelBuilder modelBuilder){ var methodInfo=typeof(DbContext).GetRuntimeMethod(nameof(DatePart),new[]{typeof(string),typeof(DateTime)}); 建模者 .HasDbFunction(methodInfo) .HasTranslation(args=>newsqlfunctionexpression(nameof(DatePart)、typeof(int?)和new[] { 新的SqlFragmentExpression(args.ToArray()[0].ToString()), args.ToArray()[1] })); } 查询:

repository.GroupBy(x=>dbContext.DatePart(“week”,x.CreatedAt));

更多信息:

您能告诉我目前的情况吗?这张罚单现在已经打开,但可能是通过其他方式解决的?这不是只有在EF Core 3.1中才有可能,它仍然是一个预览版吗?不,在EF Core 2.x中,它是可能的,在EF 3.0中,有一个问题在3.1中得到了修复: