【问题标题】:Get formatted date using entity frame work linq使用实体框架 linq 获取格式化日期
【发布时间】:2015-03-17 11:00:40
【问题描述】:

如何获取实体集合中的格式化日期 我正在使用下面的代码

  var objholiday = context.tblHolidayCalendars.Where(x => x.isDelete == false)
                          .Select(x => new 
                                 { 
                                      x.recordId,
                                      x.date.ToString("yyyy/MM/dd"),
                                 });

它不起作用。有什么方法可以解决它

【问题讨论】:

  • “不工作”如?格式问题,你有什么异常吗?要具体。
  • 正如@Rahul 所说... 它不起作用 - 您可以使用的最无用的短语。什么不工作?它没有做什么?它在做什么不该做的事?帮助我们为您提供帮助
  • x.date.ToString("yyyy/MM/dd"), 上出现错误是Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
  • SQL 无法识别 ToString() 使用 SQL 的内置日期函数或在 Select() 之前转换 AsEnumerable()

标签: c# asp.net linq entity-framework ado.net-entity-data-model


【解决方案1】:

您无法在 IQueryable 查询中轻松进行日期格式设置...

  var objholiday = context.tblHolidayCalendars
                      .Where(x => x.isDelete == false)
                      .Select(x => new 
                             { 
                                  x.recordId,
                                  x.date, // Remove HERE
                             })

添加

 .AsEnumerable()
 .Select(x => new { x.recordId, date = x.date.ToString("yyyy/MM/dd") };

因为 SQL Server 不知道 ToString() 方法。

因此,您执行返回日期的查询(如DateTime),然后在本地(.AsEnumerable())执行所需的转换。

请注意,如果date 可以是null,那么您必须:

 .AsEnumerable()
 .Select(x => new { x.recordId, date = x.date != null ? x.date.Value.ToString("yyyy/MM/dd") : null };

请注意,您可以格式化日期 SQL 端,但它有点复杂。怎么做取决于你使用的 EF 版本,因为你必须告诉 EF 使用一些 SQL 原生函数。而且你这样做并不会获得太多收益。

【讨论】:

    【解决方案2】:

    我认为您错过了匿名类型的成员声明。我可以这样做:

    var holidays = context.tblHolidayCalendars.Where(x => !x.isDelete)
                              .Select(x => new 
                                     { 
                                          Id = x.recordId,
                                          DateString = x.date.ToString("yyyy/MM/dd")
                                     });
    
    Console.WriteLine(holidays.First().Id);
    Console.WriteLine(holidays.First().DateString);
    

    【讨论】:

      【解决方案3】:

      使用您的最新评论,此问题是由于使用扩展方法 ToString on date 引起的。

      任何用表达式初始化的属性都必须有一个指定的名称;如果使用属性进行初始化,则从该属性推断名称。在您的情况下,date.ToString() 是一个表达式,因此必须提供名称。

      .Select(x => new
      {
          x.recordId,
          x.date.ToString("yyyy/MM/dd"),
      });
      

      成为,

      .Select(x => new
      {
          x.recordId,
          date = x.date.ToString("yyyy/MM/dd"),
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        相关资源
        最近更新 更多