使用实体框架linq获取格式化日期

时间:2015-03-17 11:00:40

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

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

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

它没有用。有任何方法可以解决它

3 个答案:

答案 0 :(得分: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本机函数。通过这样做,你不会获得太多收益。

答案 1 :(得分:0)

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

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);

答案 2 :(得分:0)

使用您的最新评论,此问题源于日期使用扩展方法ToString。

使用表达式初始化的任何属性都必须指定名称;如果正在使用属性进行初始化,则从该属性推断出该名称。在您的情况下,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"),
});