将可空 DateTime 转换为 IQueryable 中的字符串时出现 500 错误
500 Error when converting nullable DateTime to string in IQueryable
我有以下代码,我从数据库上下文中获取数据并将可为 null 的 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,
};
当 result
上的 ToList()
被执行时,我卡住了,浏览器在水下给我一个 500 内部服务器错误。
当我使用它时:DateOfUpdate = string.Empty
它工作得很好所以我可能在将 DateTime 转换为字符串时做错了。
知道如何解决这个问题吗?
首先。据我所知,这不属于 Linq 查询 aansluiting
。它是什么 ?
其次,为什么不先调用 .ToList()
尝试具体化数据,这样如果发生错误,您可以立即看到,而不仅仅是 500 错误。
我想在 Linq 内部调用 .ToString("dd-MM-yyyy")
不是明智之举,因为 Linq 对该函数不满意。尝试先检索数据,然后将它们转换为您的格式。
在您的情况下,您最终会收到此错误:
An exception of type 'System.NotSupportedException' occurred in
EntityFramework.SqlServer.dll but was not handled in user code
Additional information: LINQ to Entities does not recognize the method
'System.String ToString(System.String)' method, and this method cannot
be translated into a store expression.
你可以这样做:
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();
但是 这不是最佳解决方案,因为您最终实现了所有数据,这意味着所有 table 数据都将在您的应用程序中处理,除非table小.
所以最好的解决办法是:
从 Linq 查询中获取您需要的数据(只提供您需要的数据)。然后将这些数据具体化,按照你的需要格式化,然后展示给用户。
个人看法:
生成数据格式不应该是 Linq 查询的责任。这应该在应用程序的上层完成,或者至少在您实现数据后完成。
我有以下代码,我从数据库上下文中获取数据并将可为 null 的 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,
};
当 result
上的 ToList()
被执行时,我卡住了,浏览器在水下给我一个 500 内部服务器错误。
当我使用它时:DateOfUpdate = string.Empty
它工作得很好所以我可能在将 DateTime 转换为字符串时做错了。
知道如何解决这个问题吗?
首先。据我所知,这不属于 Linq 查询 aansluiting
。它是什么 ?
其次,为什么不先调用 .ToList()
尝试具体化数据,这样如果发生错误,您可以立即看到,而不仅仅是 500 错误。
我想在 Linq 内部调用 .ToString("dd-MM-yyyy")
不是明智之举,因为 Linq 对该函数不满意。尝试先检索数据,然后将它们转换为您的格式。
在您的情况下,您最终会收到此错误:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
Additional information: LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.
你可以这样做:
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();
但是 这不是最佳解决方案,因为您最终实现了所有数据,这意味着所有 table 数据都将在您的应用程序中处理,除非table小.
所以最好的解决办法是:
从 Linq 查询中获取您需要的数据(只提供您需要的数据)。然后将这些数据具体化,按照你的需要格式化,然后展示给用户。
个人看法: 生成数据格式不应该是 Linq 查询的责任。这应该在应用程序的上层完成,或者至少在您实现数据后完成。