Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC中的DateTime列排序_C#_Asp.net Mvc_Datetime - Fatal编程技术网

C# ASP.NET MVC中的DateTime列排序

C# ASP.NET MVC中的DateTime列排序,c#,asp.net-mvc,datetime,C#,Asp.net Mvc,Datetime,我有一个ASP.NETMVC应用程序,在表中有一列显示MySQL数据库中的日期时间值。该列按字符串值排序,而不是按DateTimevalue排序。我需要它显示为2020年8月14日星期五下午5:13 我通过使用 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:f}")] 我需要它按日期/时间排序。这是我的密码 数据视图: [DisplayFormat(ApplyFormatInEditM

我有一个ASP.NETMVC应用程序,在表中有一列显示MySQL数据库中的日期时间值。该列按字符串值排序,而不是按
DateTime
value排序。我需要它显示为2020年8月14日星期五下午5:13

我通过使用

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:f}")]
我需要它按日期/时间排序。这是我的密码

数据视图:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:f}")]                               
public System.DateTime JobDateTime { get; set; }
控制器:

public ActionResult Index()
{
    return View(db.jobs.OrderByDescending(x=>x.JobDateTime).ToList());
}
索引视图:

@Html.DisplayFor(modelItem => item.JobDateTime)`

我不知道如何对它进行排序,并使它以长日期格式显示。我只能得到其中一个。

听起来像是排序之前应用了
DisplayFormat
属性。在这种情况下,您可能希望将其从属性定义中删除,并将其放入Linq查询中:


或者在Razor中进行转换,以最适合您的为准。
MassDateTime
属性将位于ViewModel中(最有可能)。 我们将其命名为
JobViewModel
,或者调整您为其指定的名称

然后,字段
MassDateTime
类型应为
string
,而不是
DateTime
,以字符串格式显示在视图中

public class JobViewModel
{
    public string MassDateTime { get; set; }
}
不需要提及属性上的属性

现在
Index
方法如下:

public ActionResult Index()
{
    var data = db.jobs.
                 AsEnumerable().
                 OrderByDescending(x => x.JobDateTime).
                 Select(a => new JobViewModel
                    {
                        MassDateTime = a.JobDateTime.ToString("dddd, dd MMMM yyyy hh:mm")
                    }).ToList();

    return View(data);    
}

当您从DB中获取数据时,DateTime是以字符串格式排序的?是的,它是按照Strings对列进行排序。我尝试使用您建议的方法,但当我使用它时,它抛出一个异常,称为“No重载method for”ToString“接受1个参数。我遗漏了什么吗?在阅读了其他一些类似的问题之后,我也这样尝试了查询,它仍然给了我相同的错误
db.jobs.OrderByDescending(x=>x.JobDateTime).ToList()。选择(d=>d.ToString(“f”)
你确定
JobDateTime
DateTime
类型吗?是的,是DateTime。我仔细检查了一下哦,我监督了一些事情。使用
Select(d=>d.JobDateTime.ToString(“f”)
当您使用
OrderBy
时,您仍然可以返回原始实体。因此,您可能应该将lambda变量名保留为
x
,以避免与我的方式混淆:-)不幸的是,这并不能解决按字符串而不是按日期排序的问题。现在的问题在哪里?它在my side工作并正确排序日期,我得到一个异常:System.NotSupportedException:“LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,并且此方法无法转换为存储表达式。”@steven85791答案已更新,可能会解决您的异常错误。现在它会引发另一个异常:
传递到字典中的模型项的类型为“System.Collections.Generic.List”
1[Church\u music\u Administration\u App\u Updated\uu.Models.JobViewModel],但此字典需要“System.Collections.Generic.IEnumerable”类型的模型项
1[数据库访问.作业]。
public ActionResult Index()
{
    var data = db.jobs.
                 AsEnumerable().
                 OrderByDescending(x => x.JobDateTime).
                 Select(a => new JobViewModel
                    {
                        MassDateTime = a.JobDateTime.ToString("dddd, dd MMMM yyyy hh:mm")
                    }).ToList();

    return View(data);    
}