我正在试验Linq并且无法搞清楚分组.我已经完成了几个教程,但由于某种原因无法弄清楚这一点.
例如,假设我有一个包含多个网站ID的表(SiteStats),该表存储了按类型访问每个网站的访问者总数和过去30天的计数.
???????????????????????????????????????? ? SiteId ? VisitorType ? Last30 ? Total? ???????????????????????????????????????? ? 1 ? 1 ? 10 ? 100 ? ? 1 ? 2 ? 40 ? 140 ? ? 2 ? 1 ? 20 ? 180 ? ????????????????????????????????????????
在SQL中,我可以使用以下内容轻松获取SiteID 1的计数:
SELECT SiteId, SUM(Last30) AS Last30Sum FROM Sites WHERE SiteId = 1 GROUP BY SiteId
并且应该排成一排......
??????????????????????? ? SiteId ? Last30Total? ??????????????????????? ? 1 ? 50 ? ???????????????????????
但是我不确定如何使用Linq获得此结果.我试过了:
var statsRecord = from ss in db.SiteStats where ss.SiteId == siteId group ss by ss.SiteId into ss select ss;
但是我无法用类似的东西取回总数 statsRecord.Last30
有人可以让我知道我哪里出错了吗?任何帮助表示赞赏.
实际上,虽然Thomas的代码可以工作,但使用lambda表达式更为简洁:
var totals = from s in sites group s by s.SiteID into grouped select new { SiteID = grouped.Key, Last30Sum = grouped.Sum( s => s.Last30 ) };
它使用Sum扩展方法而不需要嵌套的LINQ操作.
根据LINQ 101示例 - http://msdn.microsoft.com/en-us/vcsharp/aa336747.aspx#sumGrouped