You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用Linq操作DataTable实现双计数查询的方法

使用LINQ对DataTable实现分组双计数统计

你可以通过LINQ to DataSet实现需求,核心逻辑是按Email分组后,分别统计每组内不同状态的记录数,和你之前用SQL的COUNT+CASE思路一致。

源DataTable数据

Email      Status 
------------------
email1     opened
email1     opened
email2     clicked
email2     clicked
email2     clicked
email1     clicked
email2     opened

期望输出

Email      Opened      Clicked
-------------------------------
email1      2             1
email2     1             3

实现代码

首先确保引用必要命名空间:

using System.Linq;
using System.Data;

编写LINQ查询:

// 假设你的DataTable实例名为dt
var stats = from row in dt.AsEnumerable()
            group row by row.Field<string>("Email") into emailGroup
            select new
            {
                Email = emailGroup.Key,
                Opened = emailGroup.Count(r => r.Field<string>("Status") == "opened"),
                Clicked = emailGroup.Count(r => r.Field<string>("Status") == "clicked")
            };

代码说明

  • dt.AsEnumerable():将DataTable转换为LINQ可处理的DataRow枚举集合。
  • group row by row.Field<string>("Email"):按邮箱地址分组,聚合该邮箱的所有状态记录。
  • Count(r => ...):在每个分组内,筛选出对应状态的记录并计数,等价于SQL里的CASE+COUNT逻辑。

如果需要将结果转回DataTable用于展示或后续操作:

DataTable resultDt = new DataTable();
resultDt.Columns.Add("Email", typeof(string));
resultDt.Columns.Add("Opened", typeof(int));
resultDt.Columns.Add("Clicked", typeof(int));

foreach (var stat in stats)
{
    resultDt.Rows.Add(stat.Email, stat.Opened, stat.Clicked);
}

内容的提问来源于stack exchange,提问作者Briskstar Technologies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:21