我有以下EF6实体:
public class Evaluation {
public Int32 Id { get; set; }
public Double Value { get; set; }
public Double Weight { get; set; }
}
我有以下型号:
public class EvaluationStats {
public Int32 LowCount { get; set; }
public Int32 NormalCount { get; set; }
public Int32 HighCount { get; set; }
}
我需要填写评估标志:
LowCount = Number of Evaluations where Weight * Value < 10
NormalCount = Number of Evaluations where Weight * Value >= 10 and <= 15
HighCount = Number of Evaluations where Weight * Value > 15
我正在尝试以下方法:
context
.Evaluations
.Select(x => new { Stat = x.Value * x.Height })
.GroupBy(x => x.Stat)
但是如何按范围进行分组以便我可以按范围计算?
更新
在某些情况下,我可能有三个以上的项目,所以我改为Enum:
public enum EvaluationLevel { VeryLow, Low, Normal, High, VeryHigh }
然后我使用IDictionary创建统计数据:
IDictionary<EvaluationLevel, Int32> EvaluationLevelStats
所以我在这本词典中会有5个项目...但我可能还有更多。
在其他情况下,我可能会有8个级别。
是否可以查询数据库并填写此字典?
答案 0 :(得分:1)
你必须计算出每个人所属的范围。我可能会这样做:
context
.Evaluations
.Select(x=> new {
Range = (x.Value * x.Weight < 10) ? "Low": ((x.Value * x.Weight <= 15)? "Normal": "High"),
Stat = x.Value * x.Weight
}.GroupBy(x => x.Range);