如何在实体集合中获取格式化日期 我使用以下代码
var objholiday = context.tblHolidayCalendars.Where(x => x.isDelete == false)
.Select(x => new
{
x.recordId,
x.date.ToString("yyyy/MM/dd"),
});
它没有用。有任何方法可以解决它
答案 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"),
});