【问题标题】:.net Core 3.1 Linq Expression "...could not be translated." Exception.net Core 3.1 Linq 表达式“...无法翻译。”例外
【发布时间】:2021-03-16 19:47:12
【问题描述】:
var asd = (from a in _context.Nodes
           where (Convert.ToDateTime(a.NodeProcessTime).Date >= DateTime.Now.Date.AddMonths(-5) && Convert.ToDateTime(a.NodeProcessTime).Date <= DateTime.Now.Date.AddMonths(-4))
           select a).Count();

我正在尝试获取两个日期之间的记录数。但是下面出现了一个例外。 NodeProcessTime 是一个字符串。需要转换为日期时间。我错过了什么吗?

System.InvalidOperationException: 'LINQ 表达式'Where( 来源:数据库集, 谓词: (n) => ToDateTime(n.NodeProcessTime).Date >= DateTime.Now.Date.AddMonths(-5) && ToDateTime(n.NodeProcessTime).Date

【问题讨论】:

  • 据我所知,这是一个重大变化。展望未来,不可能使用无法转换为 SQL 的东西,例如日期操作。见here
  • 我都试过了,但都不起作用。谢谢。

标签: linq asp.net-core


【解决方案1】:

你可以这样做:


// Convert (I asumme) string to date 
Date ToDate(string dateTime) => Convert.ToDateTime(dateTime).Date;

// Offset current datetime
Date OffsetNow(int offset) => DateTime.Now.Date.AddMonths(offset);

// Check date is between range
bool IsBetween(Date d) => ToDate(d) >= OffsetNow(-5) && ToDate(d) <= OffsetNow(-4);


var asd = _context.Nodes.Count(n => IsBetween(n));


【讨论】:

    【解决方案2】:

    你应该使用 sqlFunction 来翻译它。

    SqlFunctions.DateAdd("day", 0 ,  a.NodeProcessTime)
    

    只需将零日添加到您的字符串列

    【讨论】:

      【解决方案3】:
                  List<DateTime> dateTimes = new List<DateTime>();
                 
                  foreach (var item in _context.Nodes.ToList())
                  {
                      dateTimes.Add(Convert.ToDateTime(item.NodeScanDateTime.Substring(0, 10)));
                  };
                  int counts = dateTimes.Where(a => a > DateTime.Now.AddMonths(-5)& a < DateTime.Now.AddMonths(-4)).Count();
      

      现在,首先我得到所有节点的字符串 NodeScanDateTime 并将它们放到一个列表中。之后,我使用子字符串将它们剪切为“10.05.2020”类型并将它们转换为日期时间。然后我进行了查询,现在它可以工作了。谢谢大家...

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 1970-01-01
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2022-12-03
        相关资源
        最近更新 更多