gpt4 book ai didi

c# - Linq-to-Entities 查询中的格式化日期导致异常

转载 作者:太空狗 更新时间:2023-10-29 17:31:23 25 4
gpt4 key购买 nike

我有带日期时间归档的实体类,我想选择不同的“mon-yyyy”格式日期时间归档值并填充下拉列表。

下面的代码给我错误:

var env = db.Envelopes.Select(d => new
{
d.ReportDate.Year,
d.ReportDate.Month,
FormattedDate = d.ReportDate.ToString("yyyy-MMM")
}).Select(d => d.FormattedDate)

List<SelectListItem> _months = new List<SelectListItem>();

foreach (var mname in env)
{
_months.Add(new SelectListItem() { Text = mname, Value = mname });
}

错误信息:

LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.

如何更正此错误消息?

谢谢SR

最佳答案

请记住,您的查询将被转换为 SQL 并发送到数据库。查询不支持您尝试格式化日期,这就是您看到该特定错误消息的原因。您需要检索结果,然后在数据具体化后进行格式化。

一种选择是直接选择日期。当您遍历结果时,在将其添加到列表时对其进行格式化。但您也可以通过使用方法链在单个语句中构建具有格式化日期的列表。

List<SelectListItem> _months = db.Envelopes.OrderByDescending(d => d.ReportDate)
.Select(d => d.ReportDate)
.AsEnumerable() // <-- this is the key method
.Select(date => date.ToString("MMM-yyyy"))
.Distinct()
.Select(formattedDate => new SelectListItem { Text = formattedDate, Value = formattedDate })
.ToList();

.AsEnumerable() 方法将强制对数据库执行查询的第一部分,其余部分将使用内存中的结果。

关于c# - Linq-to-Entities 查询中的格式化日期导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5839388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com