在 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")