我有以下代码,从数据库上下文中获取数据并将可空的DateTime DateOfUpdate
转换为字符串:
var result = from data in context.releventData
select new ReleventData
{
Id = data.Id,
Status = data.Status,
DateOfUpdate = data.DateOfUpdate.HasValue ? data.DateOfUpdate.Value.ToString("dd-MM-yyyy") : string.Empty,
};
执行ToList()
上的result
时,我陷入了困境,浏览器在水下给了我一个500 Internal Server Error的信息。
当我使用以下命令时:DateOfUpdate = string.Empty
可以正常工作,因此我可能在将DateTime转换为字符串时做错了。
有什么解决方法吗?
答案 0 :(得分:3)
首先。据我所知,这不属于Linq查询aansluiting
。它是什么 ?
其次,为什么不尝试首先调用.ToList()
来实现数据,所以如果发生错误,您可以立即看到而不仅仅是500错误。
我想在Linq中调用.ToString("dd-MM-yyyy")
并不是明智之举,因为Linq对该功能不满意。尝试先检索数据,然后将其转换为您的格式。
在您的情况下,您最终会收到此错误:
“ System.NotSupportedException”类型的异常发生在 EntityFramework.SqlServer.dll,但未在用户代码中处理
其他信息:LINQ to Entities无法识别该方法 'System.String ToString(System.String)'方法,该方法不能 被翻译成商店表情。
您可以执行以下操作:
var result = context.releventData.ToList().Select(data => new ReleventData
{
Id = data.Id,
Status = data.Status,
DateOfUpdate = data.DateOfUpdate.HasValue ? data.DateOfUpdate.Value.ToString("dd-MM-yyyy") : string.Empty,
}).ToList();
但是这不是最佳解决方案,因为最终会实现所有数据,这意味着所有表数据都将在您的应用程序中处理,除非表很小,否则这是过分的。
因此,最好的解决方案:
从Linq查询中获取所需的数据(仅所需的)。然后具体化这些数据并根据需要设置其格式,然后向用户显示。
我自己的观点: Linq查询不应负责生成数据格式。这应该在应用程序的上层完成,或者至少在实现数据之后完成。