LINQ查询根据计算值的范围进行分组

时间:2012-05-30 15:58:32

标签: linq grouping range

我有一个sql查询,用于获取多个Bins的测量分布:

SELECT FLOOR(Value / @Step) * @Step AS Bin,        
       COUNT(*) AS Cnt FROM Measurements WHERE (StepId = @StepId) 
       GROUP BY Bin ORDER BY Bin 

,其中 值=基于StepId(测量表中的主键)返回的测量值 Step =实际上是组的数量(分配中的Bins)。

如何使用LINQ并根据动态创建的值范围创建分组。

请建议。

1 个答案:

答案 0 :(得分:0)

我认为这就是你所追求的:

double step = 100;
var stepId = 1;

from m in context.Measurements 
where m.StepId == stepId;
let bin = (Math.Floor(c.Value / step)) * step
orderby bin
group m by bin into x
select new { x.Key, Count = x.Count() }

你甚至可以省略Floor函数,因为整数上的“/”运算符在SQL中具有相同的功能。