【问题标题】:An unhandled exception occurred while processing the request while using LINQ expressions使用 LINQ 表达式处理请求时发生未处理的异常
【发布时间】:2020-07-08 02:06:07
【问题描述】:

我正在使用 LINQ 表达式来过滤我想从数据库中接收的数据。 这是我的表达:

  var ignicoes = _context.Ignicoes
            .Where(e => (e.Estado == Ignicoes.EstadoIgnicao.emAvaliacao && (e.DataInicioPropostaIgnicao - dataAtual).TotalHours <= 12 ) ||
                    e.Estado == Ignicoes.EstadoIgnicao.aceite ||
                    (e.Estado == Ignicoes.EstadoIgnicao.concluido && (e.DataDecisaoIgnicao - dataAtual).TotalHours <= 12 ))
           .Include(i => i.ListaOcorrencias);

DataInicioPropostaIgnicao - 是发布到数据库的日期 dataAtual- 是系统的当前日期

我有一个名为 Ignicoes 的类,它有一个名为 Estado 的属性。取决于 Estado 以及“Ignicao”已发布到数据库的时间。我只想返回数据库中十二小时或更短的数据。为什么我的这个表达式有错误? 这是错误:

我不知道我是否说清楚了,但我希望有人可以帮助我解决这个问题。谢谢

【问题讨论】:

  • 您使用的是哪个数据库?
  • 另外,您在查询中使用的字段类型是什么?
  • 我在visual studio中使用默认的
  • “Estado”是可枚举的,DataInicioPropostaIgnicao和dataAtual都是DateTime

标签: c# linq entity-framework-core


【解决方案1】:

使用 EntityFramework 时,您必须注意 Linq 查询的编写方式:查询构建器不能总是将 linq 查询转换为 sql。

根据这篇文章https://entityframework.net/subtract-two-dates,如果您使用的是 SQLServer,以下应该可以工作:

int noOfHours = 12;
DateTime oldDate = DateTime.Now.Subtract(new TimeSpan(noOfHours, 0, 0, 0));
var ignicoes = _context.Ignicoes
            .Where(e => (e.Estado == Ignicoes.EstadoIgnicao.emAvaliacao && e.DataInicioPropostaIgnicao >= oldDate ) ||
                    e.Estado == Ignicoes.EstadoIgnicao.aceite ||
                    (e.Estado == Ignicoes.EstadoIgnicao.concluido && e.DataDecisaoIgnicao >= oldDate ))
           .Include(i => i.ListaOcorrencias);

【讨论】:

  • 这个解决方案对我不起作用,因为如果我昨天下午 12 点使用 Estado = emAvaliacao 将数据发布到数据库,它不应该出现,因为它粘贴了超过 12 小时。我不知道这是否有意义
  • 是的。我想确保数据发布到数据库的日期减去今天的日期等于或小于 12 小时的差异
  • 这正是我的代码所做的,检查日期是否 >= 12 小时前(oldDate 是从现在开始的 12 小时前)
  • 能解释一下这部分吗? DateTime oldDate = DateTime.Now.Subtract(new TimeSpan(noOfHours, 0, 0, 0));
  • 这意味着现在 - 12 小时。如果现在是 2020 年 7 月 7 日的 13.00,那么 oldDate 是 2020 年 7 月 7 日的 01.00
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2021-02-20
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多