所以我有一个表,表示一个与表示该实体的工作项的表有一对多关系的业务实体,该模式基本上是这样的:
BusinessEntity
ID Title ...a bunch of other fields
WorkItem
ID BusinessEntityID WorkItemStateID
WorkItemState
ID StateDescription
我正在尝试编写一个Linq表达式,该表达式返回一个匿名对象,其中包含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(实际查询比这复杂得多)
这甚至是正确的方法吗?我可以不使用分组,如果是这样,我该怎么做?
答案 0 :(得分:1)
只需将百分比计算表达式更改为
即可(int?)(Math.Round(((Decimal)wi2Complete.Count() / wiAll.Count()) * 100))
它应该做的伎俩。将整数除以整数时,结果始终为整数(在您的情况下为0或1)。如果将第一个值转换为十进制,则结果也将是[0,1]范围内的十进制值。