使用linq和实体框架按值范围进行分组

时间:2012-09-24 21:03:01

标签: linq entity-framework linq-to-entities

我需要按年龄范围聚合的一些数据,例如:

 Age    |   Members
 ------------------
 0-13   |   150
 14-19  |   250
 20-30  |   400

在我的linq查询中,我使用EntityFunctions.DiffYears根据出生日期来计算年龄:

let age = EntityFunctions.DiffYears(contact.Birthday, today)

然而,如果我按年龄字段对组进行分组,我将获得19,20,21 ...而不是范围。 用linq和实体框架来实现这个的推荐方法是什么?

1 个答案:

答案 0 :(得分:4)

有两种方法可以做到这一点:

处理客户端上的分组

首先按照您所描述的年龄对它们进行分组,然后使用linq对结果进行对象,将年龄映射到年龄范围,然后按年龄范围进行分组。见Group by variable integer range using Linq

处理服务器上的分组

定义一个商店程序,将年龄映射到年龄范围(例如,0到13岁之间的年份返回0,19-19之间为1,依此类推),然后在查询中使用此存储过程。