【问题标题】:How can I convert a DateTime variable in a LINQ expression?如何在 LINQ 表达式中转换 DateTime 变量?
【发布时间】:2011-09-13 22:37:42
【问题描述】:

给定这个表达式:

var q = (from c in db.ContattiTitoliStudio
                     where ...
                     orderby c.Data descending
                     select new
                     {
                         c.ID,
                         Date = c.Data.ToString("MM dd, YYYY"),
                     });

c.Data is nullable,也与不可为空的 var 相同: "...No overload for method 'ToString' takes 1 arguments..."

我尝试了nullable,不可为空,(c.Data!=null)...String.FormatDateTime.Parse,等等...但我无法按照我想要的方式格式化c.Date

在 SQL Server 中,我使用 datetime 作为类型。

如果我使用普通的Date = c.Date,这将显示为“01/01/2011 0.0.00”。

【问题讨论】:

  • ContattiTitoliStudio.Data的声明类型是什么?
  • 我通常发现最好尽可能长时间地保留日期/日期时间(而不是格式化为字符串) - 在页面上实际输出之前,您真的需要字符串格式吗?
  • 如果你得到了你想要的信息,别忘了将答案标记为已接受
  • 在我的数据库中 ContattiTitoliStudio.Data 是日期,而不是日期时间,并且此 linq 用于以我的格式显示日期的中继器...
  • 如果你得到了你想要的信息,别忘了将答案标记为已接受

标签: c# asp.net linq datetime


【解决方案1】:

你试过了吗?

Date = c.Data.HasValue ? c.Data.Value.ToString("MM dd, YYYY") : string.Empty

【讨论】:

  • 当心空引用异常!
  • 很清楚 :) 为了他,无论如何我都会添加它。
  • 总是同样的错误...“方法 'ToString' 没有重载需要 1 个参数...”
  • 您确定 Data.Value 的值是 DateTime 吗?
  • 如果数据可以为空我有这个:方法'ToString'没有重载需要1个参数。如果 Data is nullable = false o 有这个:LINQ to Entities 无法识别方法 'System.String ToString(System.String)' 方法,并且此方法无法转换为存储表达式。数据是 DateTime 类型....我不明白为什么....
【解决方案2】:

利用Nullable(i.e ?? operator) C#中存在的操作

var q = (from c in db.ContattiTitoliStudio
                     where ...
                     orderby c.Data descending
                     select new
                     {
                         c.ID,
                         Date = (c.Data ?? DateTime.MinValue).ToString("MM dd, YYYY"),
                     });

注意:当c.Data的值为null时使用DateTime.MinValue,避免为null

【讨论】:

    【解决方案3】:

    好的,终于解决了:

    var test= from e in db.Employees.ToList() select new {Time= e.Date.ToString()};
    

    来自 msdn 论坛:

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/208396f4-0406-41c6-b55f-0d8bb5d14b2c

    【讨论】:

      【解决方案4】:

      你没有告诉我们,但我猜ContattiTitoliStudio.DataNullable<DateTime>。在这种情况下,你应该说

      Date = c.Data.HasValue ? "null" : c.Data.Value.ToString("MM dd, YYYY")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-02
        • 1970-01-01
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多