使用 Linq to entities 中的分组数据进行计算

Calculation using grouped data in Linq to entities

所以我有一个 table 表示一个业务实体,它与一个 table 表示该实体的工作项具有一对多的关系,模式基本上是这样的:

BusinessEntity
ID    Title   ...a bunch of other fields

WorkItem
ID    BusinessEntityID    WorkItemStateID

WorkItemState
ID    StateDescription

我正在尝试编写一个 Linq 表达式,该表达式 returns 一个匿名对象,其中包含 BusinessEntity 的所有详细信息和一个名为 PercentageComplete 的字段,该字段详细说明与 WorkItemStateID 为 2 的每个实体关联的工作项的数量

我试过以下方法:

from e in db.BusinessEntity
     let wiAll = db.WorkItem.Where(x => x.BusinessEntityID == e.ID)
     let wi2Complete = db.WorkItem.Where(x => x.WorkItemStateID == 2 && x.BusinessEntityID  == e.ID)
     select new {
         BusinessEntityID = e.ID,
         PercentComplete = wiAll.Count() > 0 ? (int?)(Math.Round((Decimal)(wi2Complete.Count() / wiAll.Count()) * 100)) : null
     }

但是这不起作用,只给我一个 1 或 0 作为 PercentComplete。我正在努力破译生成的结果 SQL(实际查询比这复杂得多)

这是正确的方法吗?我不能改用分组吗?如果可以,我该怎么做?

只需将百分比计算表达式改为

(int?)(Math.Round(((Decimal)wi2Complete.Count() / wiAll.Count()) * 100))

它应该可以解决问题。当您将一个整数除以一个整数时,结果始终是一个整数(在您的情况下为 0 或 1)。如果将第一个值转换为十进制,结果也将是 [0,1].

范围内的十进制值