如何在Entity Framework中按Age与sex属性对实体分组?
正确的多属性分组实现方式
错误原因分析
你当前的GroupBy调用参数逻辑错误:
var resultTable= dbContext.CashVacs.GroupBy(g => g.sex, g => g.age);
这段代码用了GroupBy的重载:GroupBy<TSource, TKey, TElement>(Func<TSource,TKey>, Func<TSource,TElement>),作用是按第一个参数指定的单个键分组,再用第二个参数筛选组内元素,并非同时按两个字段分组。另外实体中年龄属性是Age(大写A),你写的g.age是小写,会引发编译错误。
正确分组写法
要同时按sex和Age分组,需创建包含这两个属性的匿名类型作为分组键,示例如下:
基础分组(保留组内原始实体)
var resultTable = dbContext.myEntities.GroupBy(g => new { g.sex, g.Age });
分组后聚合统计(如统计每组人数)
var groupedWithStats = dbContext.myEntities .GroupBy(g => new { g.sex, g.Age }) .Select(g => new { 性别 = g.Key.sex, 年龄 = g.Key.Age, 分组人数 = g.Count(), 组内实体ID列表 = g.Select(e => e.Id).ToList() });
关键说明
- 匿名类型
new { g.sex, g.Age }会作为分组的唯一标识,只有当两个实体的sex和Age完全相同时,才会被归入同一组。 - 分组后可通过
g.Key访问当前组的键值(对应sex和Age),通过g直接遍历组内的所有实体元素。
内容的提问来源于stack exchange,提问作者Farid Habita
相关产品推荐
相关产品推荐

