Entity framework 如何按范围计数项目

Entity framework 如何按范围计数项目,entity-framework,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

我拥有以下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; }
}
我需要填写EvaluationStats,其中:

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
但是如何按范围分组以便我可以按范围计数

更新

在某些情况下,我可能有三个以上的项,因此我更改为枚举:

public enum EvaluationLevel { VeryLow, Low, Normal, High, VeryHigh }
然后我使用IDictionary创建统计信息:

IDictionary<EvaluationLevel, Int32> EvaluationLevelStats
IDictionary EvaluationLevelStats
所以我在这本字典里有5个条目。。。但我可能有更多

在其他情况下,我可能有,例如,8级


是否可以查询一次数据库并填写此词典?

您必须计算出每个数据库所属的范围。我可能会这样做:

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);
上下文
.评价
.选择(x=>new{
范围=(x.Value*x.Weight<10)?“低”:(x.Value*x.Weight x.Range);

我发现您的答案存在的问题是,在使用多个级别时会变得混乱…我将我的问题更新为使用我将填充的IDictionary…保存数据似乎更好,但是否可行?对于有3个以上组的情况,您可以做的一件事是创建自己的分组方法,该方法知道如何执行rm您的分组,而不是在查询中按分组,只需从表中选择stat,然后在查询后将其留给您的代码进行排序。至于让EF在查询中进行排序,我相当确定您唯一的选择是按照我上面的建议进行。
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);