500 将可为空的日期时间转换为 IQueryable 中的字符串时出错



我有以下代码,我从数据库上下文中获取数据并将可为空的日期时间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 的内部服务器错误。

当我使用它时:DateOfUpdate = string.Empty它工作得很好,所以我可能做错了将日期时间转换为字符串。

知道如何解决这个问题吗?

第一。据我所知,这不属于Linq查询aansluiting。这是什么? 其次,你为什么不尝试先调用.ToList()具体化数据,这样如果发生不好的事情,你可以立即看到,而不仅仅是500错误。

我想在 Linq 中调用.ToString("dd-MM-yyyy")并不是明智之举,因为 Linq 对该函数不满意。尝试先检索数据,然后将其转换为您的格式。 在您的情况下,您最终会收到此错误:

类型为"系统.不支持的异常"发生在 EntityFramework.SqlServer.dll但未在用户代码中处理

其他信息:LINQ to 实体无法识别该方法 "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查询的责任。这应该在应用程序的上层完成,或者至少在你具体化数据之后完成。

最新更新