gpt4 book ai didi

C# Linq 分组

转载 作者:IT王子 更新时间:2023-10-29 04:47:09 26 4
gpt4 key购买 nike

我正在尝试使用 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

关于C# Linq 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com