Linq-to-EF DateTime.ToLocalTime not supported

本文关键字:supported not ToLocalTime DateTime Linq-to-EF | 更新日期: 2023-09-27 18:32:58

Linq to EF 不支持DateTime.ToLocalTime

还有什么选择?我没主意了。

Linq-to-EF DateTime.ToLocalTime not supported

而不是使用 .在 Linq 查询中,在查询外部对参数使用相反的转换。

var dateUniversal = dateParam.ToUniversalTime();
var query = myTable.Where( t => t.DateTime > dateUniversal );

我使用了扩展的组合,并依赖于从应用程序前端传递的值来存储在本地时间中。 所以,如果我有两个约会时间..喜欢。。报告的开始日期和结束日期参数,我会把它们放在那里。让用户在本地时间提交。然后在我的控制器的后端部分。我会在我的 Linq to Entities Query 中使用 sdate 和 edate 变量。 我扔到静态帮助程序类中的静态扩展方法。 对不起,我迟到了一年多。: )

    DateTime sdate = CalcHelper.AbsoluteStart(model.StartDate);
    DateTime edate = CalcHelper.AbsoluteEnd(model.EndDate);
    public static DateTime AbsoluteStart(this DateTime dateTime)
    {
        return dateTime.Date.ToUniversalTime();
    }
    public static DateTime AbsoluteEnd(this DateTime dateTime)
    {
        return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1).ToUniversalTime();
    }

如果从服务器获取时区偏移量,则可以使用 EntityFunctions 在 linq 查询中应用偏移量

var offset = TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes;
var result = db.Dates.Where(a => 
             EntityFunctions.DiffDays(EntityFunctions.AddMinutes(a.Date, offset), DateTime.Now) == 0);

你可以这样尝试:

var promotions = _promotionService.GetAll(
            x => (DbFunctions.TruncateTime(x.CreatedDate.Value) >= viewModel.GTXFromDate.Date)
            && (DbFunctions.TruncateTime(x.CreatedDate.Value) <= viewModel.GTXToDate.Date));

通常,您应该在数据库中以 UTC 格式存储日期和时间。

在将任何本地日期/时间存储在数据库中之前,请在代码中将其转换为 UTC。

同样,如果需要在数据库中显示 UTC 的本地时间,请在数据库获取后在代码中转换它。

找到了这个问题的解决方案

public partial class Person { 
  partial void OnLoaded() { 
    this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc); 
  } 
} 

将日期时间转换为字符串进行比较,例如:

const string DATE_FORMAT = "yyyy/MM/dd";
var query = sampleTable.Where(x => x.DateTime.ToString(DATE_FORMAT) > DateTime.Now.ToString(DATE_FORMAT));