在linq语句中格式化DateTime字符串

问题描述 投票:1回答:1

我有一个web api设置,我通过实体框架在我的网站上显示信息。我正在过滤我的数据,所以它只会拉回我想要的特定部分,其中包括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编写的。

c# entity-framework linq datetime-format
1个回答
2
投票

正如John所评论的那样,你的LINQ应该抛出异常,因为你首先选择字符串,然后尝试过滤它们就好像它们是对象一样。

但无论如何,这种方法都是倒退的。这只是获取数据,所以它应该保持原样,没有任何格式。让您的视图图层负责格式化。

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")
© www.soinside.com 2019 - 2024. All rights reserved.