【发布时间】:2019-07-03 18:45:29
【问题描述】:
我在 SQL 表中有一个 date 字段,如果我尝试保存,则 09-02-2019 或 09-february-2019 他将其保存给我,但尝试恢复该日期显示如下(全部一起或与 T 一起):
2019-02-09 00:00:00:000
我正在尝试使用 EF 和 LINQ 恢复这些值以便能够格式化日期,我尝试实现这一点:
我的班级订单中的日期属性
[Column(TypeName = "date")]
public DateTime? fechaInicio { get; set; }
[Column(TypeName = "date")]
public DateTime? fechaExpo { get; set; }
[Column(TypeName = "date")]
public DateTime? fechaEntrega { get; set; }
获取数据列表
//TRAER LISTA DE ORDENES
public List<mapOrdenesListaTemp> listadoOrdenes()
{
var lista = new List<mapOrdenesListaTemp>();
using(var ctx=new ModelContext())
{
lista = ctx.Ordenes.Select(m => new mapOrdenesListaTemp
{
fechaInicio=Convert.ToDateTime(m.fechaInicio).ToString("dd-mmmm-yyyy",CultureInfo.InvariantCulture),
fechaExportacion= Convert.ToDateTime(m.fechaExpo).ToString("dd-mmmm-yyyy", CultureInfo.InvariantCulture),
fechaEntrega= Convert.ToDateTime(m.fechaEntrega).ToString("dd-mmmm-yyyy", CultureInfo.InvariantCulture)
}).ToList();
}
我尝试在此处分配数据(类 mapOrdenesListaTemp)
public class mapOrdenesListaTemp
{
public string fechaInicio { get; set; }
public string fechaEntrega { get; set; }
public string fechaExportacion { get; set; }
}
但我收到此错误:
System.NotSupportedException: 'LINQ to Entities 无法识别 方法'System.String ToString(System.String, System.IFormatProvider)' 方法,并且该方法不能翻译成商店表达式。'
我知道我不能使用.ToString (),因为错误告诉我,但是我如何恢复数据然后应用转换(我想将日期从2019-02-09 传递给09-February-2019?无论如何为了绕过这个错误,不知道我的代码是否正确?)
【问题讨论】:
-
如果可以的话,我想你还没有完全理解日期值和日期表示之间的区别。该值是一个大整数,基本上是自默认日期(如 1900 年 1 月 1 日或 1970 年 1 月 1 日,Unix 纪元)以来的时间单位数。当您从数据库中读取数据时,您会得到一个日期值。你得到的价值非常好。您只需要在输出时根据需要对其进行格式化。喜欢
fechaInicio?.ToString("dd mmmm yyyy")。您还可以使用 toString 重载来指定区域性。我错过了什么吗? -
@A.Chiesa 正确,我需要将输出格式化为
ToString("dd mmmm yyyy"),我找到了在互联网上转换日期的方法,但我不知道这样做是否正确 -
是的 ;) 基本上,您在整个应用程序中都将日期保持为“值形式”(没有官方术语:它只是一个 DateTime 值)。除非您输出值:无论如何,用户将看到一个字符串,因此您可以选择如何执行格式化。如果您不这样做,框架将选择默认格式字符串。这就是你所看到的。
-
我真的认为@A.Chiesa 做到了——日期是它自己的数据类型。你如何渲染它是另一回事。这是如何显示的?在表单中、在 Web 应用程序中、在控制台上?
标签: c# sql entity-framework linq date