C# C Linq分组
我正在用Linq做实验,但我很难搞清楚分组。我已经阅读了好几篇教程,但由于某种原因,我无法理解这一点 例如,假设我有一个带有多个网站ID的SiteStats表,该表按类型存储了过去30天访问每个网站的总访客数C# C Linq分组,c#,linq,C#,Linq,我正在用Linq做实验,但我很难搞清楚分组。我已经阅读了好几篇教程,但由于某种原因,我无法理解这一点 例如,假设我有一个带有多个网站ID的SiteStats表,该表按类型存储了过去30天访问每个网站的总访客数 ╔════════╦═════════════╦════════╦══════╗ ║ SiteId ║ VisitorType ║ Last30 ║ Total║ ╠════════╬═════════════╬════════╬══════╣ ║ 1 ║ 1
╔════════╦═════════════╦════════╦══════╗
║ 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这样的东西来找回总数
有人能告诉我哪里出了问题吗?非常感谢您的帮助。对于我来说,最简单的说明方法是使用内存中的对象,以便清楚发生了什么。LINQtoSQL应该能够接受相同的LINQ查询并将其转换为适当的SQL
public class Site
{
static void Main()
{
List<Site> sites = new List<Site>()
{
new Site() { SiteID = 1, VisitorType = 1, Last30 = 10, Total = 100, },
new Site() { SiteID = 1, VisitorType = 2, Last30 = 40, Total = 140, },
new Site() { SiteID = 2, VisitorType = 1, Last30 = 20, Total = 180, },
};
var totals =
from s in sites
group s by s.SiteID into grouped
select new
{
SiteID = grouped.Key,
Last30Sum =
(from value in grouped
select value.Last30).Sum(),
};
foreach (var total in totals)
{
Console.WriteLine("Site: {0}, Last30Sum: {1}", total.SiteID, total.Last30Sum);
}
}
public int SiteID { get; set; }
public int VisitorType { get; set; }
public int Last30 { get; set; }
public int Total { get; set; }
}
实际上,尽管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示例-尽管OP没有问,但您能告诉我们如何用LINQ的方法语法编写它吗?