c# - Math.Round() - LINQ 查询

标签 c# .net linq math

我正在运行一个 LINQ 查询,该查询使用本地“let”变量来计算本地值以与传递到查询中的参数进行比较。

我有以下查询:

Items = from lead in Items
        let total = lead.NurtureActions.Count(q => !q.Deleted)
        let completed = lead.NurtureActions.Count(nurtureAction => nurtureAction.Completed && !nurtureAction.Deleted)
        let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven)
        where 
            total>0 && 
            percentage == progress
        select lead;

上面真正重要的部分是下面这行:

let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven)

正如您在我的查询中看到的,我正在将该查询的结果与传递到我的函数中的 progress 进行比较。

例如:我可能会传入值 8,因此 progress 的值为 8。但是计算出的 百分比 最初可能是 8.223,但我需要将其四舍五入到 8

我相信我这样做是正确的,但由于某种原因,有些地方没有正常工作。

关于什么可能导致四舍五入有什么想法吗?我还尝试了舍入的 AwayFromZero 选项,但这也不起作用。

编辑 对于那些要求更多信息的人,我不确定它在计算什么值。我没有调试 LINQ 查询的经验,也不知道从哪里开始找出那个值是什么。如果我知道如何获得它,我会提供它。

最佳答案

随机猜测:totalcompletedint,所以(completed/total) 结果是截断值。截断值乘以 100,然后转换为 double

如果您希望 (completed/total) 返回 double,我想这在某些情况下会产生意想不到的结果。

修复:

let total = (double)lead.NurtureActions.Count(...)
let completed = (double)lead.NurtureActions.Count(...)
let percentage = Math.Round((completed/total)*100, ...)

关于c# - Math.Round() - LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962290/

相关文章:

c# - Linq 'first' 问题

c# - 如何将对象树反序列化为 DTO?

c# - 如何检查 "Everyone"是否对c#中的文件具有完全控制权限

.net - 使用 IDisposable 取消订阅事件

c# - Linq 填充类的值

带有用户名和密码的 c# VssBasicCredential

c# - 在 Windows Store App (Win 8.1) 中使用 MIDI

c# - 当窗体被激活/聚焦时,如何在 C# MenuStrip 上触发鼠标单击?

c# - DataTable 不显示分钟和秒

c# - 我可以使用 System.Linq.Expressions 动态生成异步方法吗?