当前位置:  开发笔记 > 编程语言 > 正文

C#Linq分组

如何解决《C#Linq分组》经验,为你挑选了1个好方法。

我正在试验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

有人可以让我知道我哪里出错了吗?任何帮助表示赞赏.



1> Ben Laan..:

实际上,虽然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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有