我正在加入一个{uniqueidentifier ID,bool IsRead)。我想计算读者人数,所以我这样做:
inbox.GroupJoin(
isRead,
p => p.ID,
r => r.ID,
(p, r) => new {ID = p.ID, ReadRate = r.Sum( x => x.IsRead ) / (decimal)r.Count() }
)
那不能编译,因为它不能求和布尔值。我需要将Sum函数的IsRead属性转换为小数,但我担心使用的强制转换方法的性能。
x => x.IsRead ? 1 : 0
,但我认为条件不合适。x => Convert.ToDecimal
(根据我的理解,我不支持Convert.*
。)(int)
进行直接投射不适用于C#中的布尔值。r.Cast<decimal>()
无法使用,因为它没有像Sum
这样的选择器,因此我无法在没有额外工作的情况下从对象中选择IsRead
属性。r.Select( x => x.IsRead ).Cast<decimal>().Sum()
,但我真的需要Select吗?(a,b) => new {ID = a.ID, IsRead = b.IsRead}
。答案 0 :(得分:1)
可能会解决您的问题:更改
r.Sum( x => x.IsRead )
到
r.Count( x => x.IsRead )