LINQ to Entities不能识别'System方法.字符串GetMonthName (Int32) &

本文关键字:字符串 方法 GetMonthName Int32 System Entities to 不能 识别 LINQ | 更新日期: 2023-09-27 18:08:59

我做错了什么?提示:存储库方法GetResearchArticles()返回一个iquerable。

var grouped = (from p in _researchArticleRepository.GetResearchArticles()
               group p by new { month = p.DatePublished.Month, year = p.DatePublished.Year } into d
               select new
               {
                   dt = d.Key.month + "-" + d.Key.year,
                   dtByMonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(d.Key.month) + " " + d.Key.year
               }//count = d.Count() }
               )
               .OrderByDescending(g => g.dt);
return grouped.ToDictionary(item => item.dt, item => item.dtByMonthName);

LINQ to Entities不能识别'System方法.字符串GetMonthName (Int32) &

它可能正在尝试将该语句转换为SQL表达式,这是它无法做到的。您应该对已经从数据库中检索到的数据进行调用,而不是尝试在数据库上执行此操作。

基本上,您需要运行.ToList()或其他东西来强制获取数据,然后调用GetMonthName()

既然你没有做任何过滤,这应该工作,但你拉出所有的研究文章到内存中,因为SQL不知道如何获得月

var grouped = (from p in _researchArticleRepository.GetResearchArticles().ToList()
                   group p by new { month = p.DatePublished.Month, year = p.DatePublished.Year } into d
                   select new
                   {
                       dt = d.Key.month + "-" + d.Key.year,
                       dtByMonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(d.Key.month) + " " + d.Key.year
                   }//count = d.Count() }
                   )
                   .OrderByDescending(g => g.dt);
    return grouped.ToDictionary(item => item.dt, item => item.dtByMonthName);