Entity framework core EF核心2.1浮点数转换问题

Entity framework core EF核心2.1浮点数转换问题,entity-framework-core,ef-core-2.0,ef-core-2.1,entity-framework-core-2.1,Entity Framework Core,Ef Core 2.0,Ef Core 2.1,Entity Framework Core 2.1,我在EntityFrameworkCore2.1中遇到了查询生成问题 我有一个问题 var q = KostenSchweissen.Where(k => k.Grenze >= ewd) .OrderBy(k => k.Grenze) .FirstOrDefault(); 其中KostenSchweissen.Grenze为整数,而ewd为浮点 因此,这将查找“Grenze”大于或等于传递的值的第一行。 这在以前运行良好(EF Core 1.x,不确定是否为2.0)

我在EntityFrameworkCore2.1中遇到了查询生成问题

我有一个问题

var q = KostenSchweissen.Where(k => k.Grenze >= ewd)
  .OrderBy(k => k.Grenze)
  .FirstOrDefault();
其中
KostenSchweissen.Grenze
为整数,而
ewd
为浮点

因此,这将查找“Grenze”大于或等于传递的值的第一行。 这在以前运行良好(EF Core 1.x,不确定是否为2.0),但现在它正在生成查询(从SQL Server Profiler):

其中
ewd
为17.1。因此,这完全忽略了ewd是浮动的,显然返回了错误的成本。在查询中转换为double或float不起作用,我唯一能想到的解决方法是

    var q = KostenSchweissen.Where(k => k.Grenze * 1.0 >= ewd)
      .OrderBy(k => k.Grenze)
      .FirstOrDefault();
这显然是不好的,因为它涉及到DB端计算。在我的例子中,查询的性能并不重要,但我仍然想知道:这是一个bug,还是被认为是一个特性?若然,原因为何?这难道不至少是一个应该在某处宣布的突破性变化吗?还是我只是盲目地去寻找它

我试图在EF文档中找到任何提示-发行说明、突破性更改、论坛。。。但是什么也找不到

我将非常感谢任何关于相关文档、最佳实践或任何其他可能有助于解决此问题的提示

编辑:EF核心团队已接受这一缺陷,将在3.0.0()中修复。美好的
同时,有没有人知道我可以做些什么作为解决办法?我是否必须手动查找可能发生这种情况的所有查询?

看起来这可能是EF Core-

如果您注意到
。其中(k=>k.Grenze>=17.1)
将导致它使用值17.1生成sql查询,因为它不会将其生成为参数化查询-在处理局部变量时,尽管它似乎将它们转换为与映射的属性相同的类型,但这会导致舍入问题

这主要是为了确保查询中的组合类型,允许更好的索引等,尽管在
浮点
十进制
的情况下,它会导致潜在的舍入问题


建议在GitHub上对此提出一个问题,因为它可能(在您的情况下也是如此)导致不正确的查询结果

在github上作为问题提交:。他们认为这是一个bug,并将在3.0.0中修复它。谢谢你的帮助!
    var q = KostenSchweissen.Where(k => k.Grenze * 1.0 >= ewd)
      .OrderBy(k => k.Grenze)
      .FirstOrDefault();