假如有一张表(DataTable),有SSHYZID、YHZMC、YHXM、YHXB等字段
SSHYZID YHZMC YHXM YHXB
1 好友 张三 男
1 好友 李四 男
2 同事 王五 男
现在要按YHZMC进行分组统计,可以通过以下Linq进行查询统计:
//用函数的写法
var fz = DsFriends.Tables[0].AsEnumerable().GroupBy(row =>
new { zid = row["SSHYZID"], zmc = row["YHZMC"] })
.Select(p => new { zid = p.Key.zid, zmc = p.Key.zmc, rs = p.Count() });
SSHYZID YHZMC YHXM YHXB
1 好友 张三 男
1 好友 李四 男
2 同事 王五 男
现在要按YHZMC进行分组统计,可以通过以下Linq进行查询统计:
//用函数的写法
var fz = DsFriends.Tables[0].AsEnumerable().GroupBy(row =>
new { zid = row["SSHYZID"], zmc = row["YHZMC"] })
.Select(p => new { zid = p.Key.zid, zmc = p.Key.zmc, rs = p.Count() });
//用Linq的写法
//var fz = from a in DsFriends.Tables[0].AsEnumerable()
// group a by new { zid = a["SSHYZID"], zmc = a["YHZMC"] } into m
// select new {id = m.Key.zid, mc = m.Key.zmc, rs = m.Count() };
对查询结果fz,如果要将其转换成表(DataTable),可以通过以下函数实现
/// <summary>
/// 将Linq查询结果转换为表,表可以先定义结构,也可自动根据查询结果生成表结构
/// </summary>
/// <param name="result">Linq查询结果</param>
/// <param name="table">表</param>
public static void LinqResultToTable(IEnumerable result, ref DataTable table)
{
if (result == null) return;
if (table == null)
table = new DataTable();
PropertyInfo[] pi = null;
foreach (var v in result)
{
if (pi == null)
{
//获取查询结果类的所有属性
pi = v.GetType().GetProperties();
if (pi == null) return;
foreach (PropertyInfo property in pi)
{
//如果表结构不包含此列,则根据属性名称和值类型自动添加到表中
if (table.Columns.Contains(property.Name))
continue;
DataColumn dc = new DataColumn(property.Name, property.GetValue(v, null).GetType());
table.Columns.Add(dc);
}
}
DataRow row = table.NewRow();
table.Rows.Add(row);
foreach (PropertyInfo p in pi)
{
row[p.Name] = p.GetValue(v, null);
}
}
}
//var fz = from a in DsFriends.Tables[0].AsEnumerable()
// group a by new { zid = a["SSHYZID"], zmc = a["YHZMC"] } into m
// select new {id = m.Key.zid, mc = m.Key.zmc, rs = m.Count() };
对查询结果fz,如果要将其转换成表(DataTable),可以通过以下函数实现
/// <summary>
/// 将Linq查询结果转换为表,表可以先定义结构,也可自动根据查询结果生成表结构
/// </summary>
/// <param name="result">Linq查询结果</param>
/// <param name="table">表</param>
public static void LinqResultToTable(IEnumerable result, ref DataTable table)
{
if (result == null) return;
if (table == null)
table = new DataTable();
PropertyInfo[] pi = null;
foreach (var v in result)
{
if (pi == null)
{
//获取查询结果类的所有属性
pi = v.GetType().GetProperties();
if (pi == null) return;
foreach (PropertyInfo property in pi)
{
//如果表结构不包含此列,则根据属性名称和值类型自动添加到表中
if (table.Columns.Contains(property.Name))
continue;
DataColumn dc = new DataColumn(property.Name, property.GetValue(v, null).GetType());
table.Columns.Add(dc);
}
}
DataRow row = table.NewRow();
table.Rows.Add(row);
foreach (PropertyInfo p in pi)
{
row[p.Name] = p.GetValue(v, null);
}
}
}