Csharp/C#教程:不支持Linq-to-EF DateTime.ToLocalTime分享


不支持Linq-to-EF DateTime.ToLocalTime

Linq到EF不支持DateTime.ToLocalTime

有什么选择? 我的想法已经不合时宜了。

而不是在Linq查询中使用.ToLocalTime(),而是在参数的查询之外使用相反的转换。

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

我使用了Extensions的组合,并依赖于从我的应用程序的前端传递的值在LocalTime中。 所以,如果我有两个日期时间..比如…报告的开始日期和结束日期参数,我会把它们放在那里..让用户在LocalTime中提交..然后在我的控制器的后端部分..我在我的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(); } 

你可以尝试这样:

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

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

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

同样,如果需要在数据库中显示UTC的本地时间,则在数据库提取后将其转换为代码。

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

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

将DateTime转换为String进行比较 ,例如:

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

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

上述就是C#学习教程:不支持Linq-to-EF DateTime.ToLocalTime分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984037.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐