在 linq 语句中格式化 DateTime 字符串
Formatting DateTime string inside of a linq statement
我设置了一个网站 api,我通过 entity framework 在我的网站上显示信息。我正在过滤我的数据,因此它只提取我想要的特定部分,其中包括 DateTime
值。
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
我的日期显示为:
2019-02-05T15:11:50.39
我需要做的是将 DateTime
格式更改为其他格式。理想情况下:
Saturday 2 February 9:12:30
在我的 linq 调用中,我尝试了以下操作:
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Select(d => d.LogDate.ToString("f")).Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
在我的模型上,我尝试了以下属性:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}")]
public DateTime LogDate { get; set; }
我的尝试都没有奏效。我在陈述中做错了什么?
上面是用 DotNet 4.7 写的,不是用 DotNetCore 写的。
正如 John 评论的那样,您的 LINQ 应该抛出异常,因为您首先 select 字符串,然后尝试将它们作为对象进行过滤。
但这种做法无论如何都是倒退的。这只是关于获取数据,所以它应该保持原样,没有任何格式。让您的视图层负责格式化。
DisplayFormat
属性很棒,但前提是您使用 Html.DisplayFor
/Html.EditorFor
助手。如果您只是在视图中执行类似 @Model.LogDate
的操作,请考虑使用您需要的格式调用 ToString(format)
。
最后,您的格式看起来不像您希望的那样。您正在查找的正确格式是:dddd, dd MMMM HH:mm:ss
.
总而言之,让过滤器保持原样,并使用带有此注释的 DisplayFor
:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM HH:mm:ss}")]
public DateTime LogDate { get; set; }
...
@Html.DisplayFor(m => m[i].LogDate)
或者不用任何注解,直接使用
@Model[i].LogDate.ToString("dddd, dd MMMM HH:mm:ss")
我设置了一个网站 api,我通过 entity framework 在我的网站上显示信息。我正在过滤我的数据,因此它只提取我想要的特定部分,其中包括 DateTime
值。
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
我的日期显示为:
2019-02-05T15:11:50.39
我需要做的是将 DateTime
格式更改为其他格式。理想情况下:
Saturday 2 February 9:12:30
在我的 linq 调用中,我尝试了以下操作:
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Select(d => d.LogDate.ToString("f")).Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
在我的模型上,我尝试了以下属性:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}")]
public DateTime LogDate { get; set; }
我的尝试都没有奏效。我在陈述中做错了什么?
上面是用 DotNet 4.7 写的,不是用 DotNetCore 写的。
正如 John 评论的那样,您的 LINQ 应该抛出异常,因为您首先 select 字符串,然后尝试将它们作为对象进行过滤。
但这种做法无论如何都是倒退的。这只是关于获取数据,所以它应该保持原样,没有任何格式。让您的视图层负责格式化。
DisplayFormat
属性很棒,但前提是您使用 Html.DisplayFor
/Html.EditorFor
助手。如果您只是在视图中执行类似 @Model.LogDate
的操作,请考虑使用您需要的格式调用 ToString(format)
。
最后,您的格式看起来不像您希望的那样。您正在查找的正确格式是:dddd, dd MMMM HH:mm:ss
.
总而言之,让过滤器保持原样,并使用带有此注释的 DisplayFor
:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM HH:mm:ss}")]
public DateTime LogDate { get; set; }
...
@Html.DisplayFor(m => m[i].LogDate)
或者不用任何注解,直接使用
@Model[i].LogDate.ToString("dddd, dd MMMM HH:mm:ss")