如何按范围计算项目

时间:2014-08-29 16:21:08

标签: entity-framework

我有以下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个级别。

是否可以查询数据库并填写此字典?

1 个答案:

答案 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);