c# - LINQ to Entities 中的round double
问题描述
LINQ to entity 不支持 Math.Round 函数(我假设这意味着将 LINQ 与实体框架 dbset 一起使用),但我确实需要在查询中舍入双精度以根据用户输入过滤大量行。
用户输入是点后的 4 位数字,db 中的双精度数可以是任意大小。
有没有办法在查询中四舍五入?
更新:
基本上用户在表格列的过滤器中输入一些数字。可以说这是水果的重量。
因此,例如用户输入重量为 4.2152,该列必须过滤所有重量为 4.21515 或 4.215212 等的水果。
并且在数据库中有很多水果,重量为 4.21514543543643
结果
因此,经过一天的努力,我决定使用范围条件。虽然这不是一个完全的解决方案。如果用户输入 4.2152,则范围过滤条件大于 4.21515。但它会过滤掉 4.215149 值,否则会四舍五入为 4.2152。
问题已解决,但不完全符合需要:(
解决方案
与其尝试对服务器上的数据进行四舍五入,不如尝试使用一些边界。
对于您的示例,您基本上想要所有重量在 4.2152 和 4.2153 之间的水果。
现在,这将取决于您的具体情况,(您是否总是想要 4 位小数的精度?您使用的确切数据类型是什么,等等......),所以确切的算法取决于您。
但它看起来像这样:
double lowerBound = userInput; // 4.2152
double precision = 0.0001;
double upperBound = userInput + precision;
var query = DbSet<Fruit>.Where(f => lowerBound >= f.Weight && f.Weight < upperBound);
另请记住,浮点运算有时会让您感到惊讶。根据您的用例,这+ 0.0001
可能不是您想要的。
推荐阅读
- python - 在 DRF 中获取序列化程序列表时出现 TypeError
- docker - Vidyo 问题:在 mediabrige 容器中,当所有参与者离开时,“呼叫”过程并未结束
- javascript - 无法在节点 js 中使用 facebook-nodejs-business-sdk 模块创建 AdCreative
- php - 如何使用 Laravel 获取选择值文本?
- python - 我正在尝试在终端中运行二进制搜索算法(Python),但没有打印到终端
- java - Spring boot 中的条件 JSON 请求映射
- sql - 添加行而不插入
- sharepoint - SP2019 混合共享/专用 Minroles
- python - 对于上传的 python zip 包,Python AWS Glue 日志显示“考虑将不带前缀的文件作为 python 额外文件”
- c# - 如何在 C# 中使用 Ionic-zip 下载大文件时修复 zip 文件损坏错误