【问题标题】:ASP.NET Entity Framework LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)ASP.NET Entity Framework LINQ to Entities 无法识别方法“System.DateTime ToDateTime(System.String)
【发布时间】:2017-01-31 21:15:22
【问题描述】:

我基本上是在尝试按月和年分组的日期“档案”。但是我的问题是数据库中的日期是字符串...不是我的选择。

这是我获取日期组列表的代码

var dates = dbBlog.Data
                .GroupBy(o => new
                {
                    Month = Convert.ToDateTime(o.date).Month,
                    Year = Convert.ToDateTime(o.date).Year
                })
                .Select(g => new BlogArchiveClass
                {
                    Month = g.Key.Month,
                    Year = g.Key.Year,
                    Total = g.Count()
                })
                .OrderByDescending(a => a.Year)
                .ThenByDescending(a => a.Month)
                .ToList();

但是当我使用它时,我得到了这个错误:

LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)

如何使用数据库中的字符串日期完成我正在做的事情?

【问题讨论】:

  • 尽你所能来正确地设计数据库。不要满足于“不可能”。日期作为字符串将是一个持续的颈部疼痛。

标签: c# asp.net entity-framework linq


【解决方案1】:

如果您知道字符串的格式,那么您可能可以执行如下操作:

var dates = dbBlog.Data
            Select(d => new 
            {
                 Month = d.Month.Substring(....),
                 Year  = d.Year.Substring(....)
            })
            .GroupBy(o => new { o.Month,o.Year})
            .Select(g => new BlogArchiveClass
            {
                Month = g.Key.Month,
                Year = g.Key.Year,
                Total = g.Count()
            })
            .OrderByDescending(a => a.Year)
            .ThenByDescending(a => a.Month)
            .ToList();

【讨论】:

  • 我不明白....什么替换了.... 而且 d 不包含月份或年份(我的班级不包含它们)
  • @user979331 我想他想到了o.Date。而...是字符串内对应日期部分的start, length(格式固定时,可以计算出来)。如果格式不固定,那你就不走运了。
  • 这正是我的意思,谢谢。实际上,如果您的日期格式是固定的,您可以选择使用子字符串 msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx 提取月份和年份的值
  • 如果目标数据库仅为 SqlServer,您可以尝试SqlFunctions.DateName
  • 我唯一不明白的是我把o.Date放在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多