9

DateTime.ToLocalTimeLinq to EF 不支持。

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

4

7 回答 7

8

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

var dateUniversal = dateParam.ToUniversalTime();

var query = myTable.Where( t => t.DateTime > dateUniversal );
于 2012-05-03T12:20:51.620 回答
0

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

将代码中的任何本地日期/时间转换为 UTC,然后再将它们存储到数据库中。

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

于 2012-05-03T12:27:32.830 回答
0

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

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

var offset = TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes;
var result = db.Dates.Where(a => 
             EntityFunctions.DiffDays(EntityFunctions.AddMinutes(a.Date, offset), DateTime.Now) == 0);
于 2015-07-06T19:57:43.027 回答
0

你可以这样尝试:

var promotions = _promotionService.GetAll(
            x => (DbFunctions.TruncateTime(x.CreatedDate.Value) >= viewModel.GTXFromDate.Date)
            && (DbFunctions.TruncateTime(x.CreatedDate.Value) <= viewModel.GTXToDate.Date));
于 2015-07-10T04:34:09.243 回答
-1

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

const string DATE_FORMAT = "yyyy/MM/dd";
var query = sampleTable.Where(x => x.DateTime.ToString(DATE_FORMAT) > DateTime.Now.ToString(DATE_FORMAT));
于 2015-07-07T08:25:52.490 回答
-2

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

public partial class Person { 

  partial void OnLoaded() { 
    this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc); 
  } 
} 
于 2012-05-03T11:55:07.057 回答