【问题标题】:How to use DateAdd function in Linq?如何在 Linq 中使用 DateAdd 函数?
【发布时间】:2013-04-03 20:01:35
【问题描述】:

我有一个用户可以发布的事件,并且可以为每个事件添加相关的 cmets,虽然我的数据库引擎驻留在我们的服务器中,但我住在东欧(Cy),我们有 7-8小时时差。我对事件和评论都使用 Linq 匿名类型,所以我想知道如何使用 DateAdd 函数来更正 cmets 日期时间中的时间差异。

这是我的 linq 表达式的示例;

var myEvents = from a in myEntities.AddEvents
               where a.Authorized == true
               orderby a.Id descending
               select new
               {
                   a.Id,
                   a.VenueName,
                   a.EventType,
                   a.Date,
                   a.StartTime,
                   a.EndTime,
                   a.Address,
                   a.Phone,
                   a.Reviews (This is for "Comments" and where i stuck!)
               };

任何想法表示赞赏!谢谢

【问题讨论】:

  • 为什么不将日期时间存储为 UTC?
  • 指定LINQ的方言可能会有所帮助。

标签: asp.net linq dateadd


【解决方案1】:

例如,您可以使用DateTime.AddHours

var myEvents = from a in myEntities.AddEvents
               ...
               select new
               {
                   ...
                   Date = a.Date.AddHours(7),
                   ...
               };

存在用于添加daysmonthsyearsminutessecondsmilliseconds 的类似方法。

但是,对于实体框架,您需要使用 EntityFunctions.AddHours 或它的盟友。

【讨论】:

  • 嗨,当我尝试上面的代码时,我得到了这个错误; LINQ to Entities 无法识别方法“System.DateTime AddHours(Double)”方法,并且该方法无法转换为存储表达式。
  • @MutluWest 我相信你需要使用EntityFunctions。请参阅我的更新答案。
  • 嗨,对不起,我迟来的回复!我现在正在检查它!谢谢!
【解决方案2】:

在插入事件和评论时使用 TimeZoneInfo.ConvertTime,例如

DateTime CommentDate = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Arabic Standard Time")); 

请查看以下链接如何使用 TimeZoneInfo.ConvertTime

http://www.xiirus.net/articles/article-_net-convert-datetime-from-one-timezone-to-another-7e44y.aspx

【讨论】:

  • 好的,但我还很新,我不知道如何实现上面的代码,我的意思是放在哪里以及如何使用它。你能更具体地解释一下吗?谢谢!
  • 在插入评论时使用此代码。特定于您的时区的转换日期将出现在您的数据库记录中。检索评论时无需任何转换。
  • 嗨,我不知道如何将它集成到 linq 匿名类型表达式中,问题是我对 linq 很陌生,我真的被上面的代码(myCode) .评论代表 Review Tbl 和 ReviewDate 驻留在此 tbl 中,我需要将 TimeZonInfo 功能集成到此列中,如何?谢谢
【解决方案3】:

问题已经解决了,非常感谢!当我将主题列修改为使用 addHours 函数时,我基本上使用了 foreach 循环。现在一切正常。尽管非常感谢,但以下解决方案均不适用!!!

【讨论】:

    【解决方案4】:

    这是 Linq 中 DateAdd 的语法:

    DateTime.Now.AddMonths(YourInteger)
    DateTime.Now.AddHours(YourInteger)
    

    ...等等。使用它的最佳方法是创建一个新变量,否则您会遇到错误。

    DateTime yourDate = DateTime.Now.AddMonths(6);
    

    在此之后,您可以使用您创建的变量来验证 Linq 中的数据。

    如果你这样做:

    new entityStuff{
        field = o.date >= DateTime.Now.AddMonths(X) //months, days... you have other methods besides this one!
    }
    

    你会遇到错误。

    你应该这样做,至少和我一起工作!

    new entityStuff{
        field = o.date >= yourDate
    }
    

    希望对你有帮助,对我有帮助 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      相关资源
      最近更新 更多