请考虑此图片:
我有一张这样的表:
Age Active Men/Women
-------------------------------------------------
我想用linq写一个查询给男性和女性每个年龄段Count
的实体。我可以使用let
运算符来计算单行,但我想在一个查询中计算所有。
感谢
答案 0 :(得分:1)
如何使用group ... by
:
http://code.msdn.microsoft.com/LINQ-to-DataSets-Grouping-c62703ea#Simple1
http://ddkonline.blogspot.com/2008/04/linq-group-by-syntax-for-grouping-on.html
答案 1 :(得分:1)
我不认为这在Linq2Sql中是可行的,但我提出了这个查询:
Func<int, string> ageGroup = age => string.Format("Age {0}-{1}", (age / 5) * 5, ((age / 5) * 5) + 4);
var blub = from row in table.AsEnumerable()
where row.IsActive == 1
group row by ageGroup(row.age)
into grouped
from g in grouped
let menCount = g.Aggregate(0, (sum, r) => sum + r.men)
let womenCount = g.Aggregate(0, (sum, r) => sum + r.women)
let totalCount = menCount + womenCount
select new { AgeGroup = g.Key, Men = menCount, Women = womenCount, Total = totalCount}
首先,我定义一个函数来返回给定年龄的AgeGroup((age / 5) * 5
给出AgeGroup的起始编号)。从那里它非常简单。对年龄进行分组并将数字相加。
修改强>
我认为在一个查询中不可能。由于group by
结束了查询(例如select
),您需要先进行分组再添加
您不能使用IQueryable
,因为SQL中不知道ageGroup()
函数,因此无法在Linq2Sql中使用。