//用函数的写法 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 q = from o in tablename
group o by o.zs into og
select new { Name = og.Key, Count = og.Count() };
var q = from o in table
select new { Name ="zs", Count =table.Count() };
where date>'2013-01-01'
select new { Name ="zs", Count =o.Count() };
我是想当然的这么写的,但不对...
where o.date>'2013-01-01'
select new { Name ="zs", Count =o.Count() };
我在 LINQPad中试着写,报错Cannot execute text selection: “LINQPad.User.RA_MonthlyReportTemp”不包含“Count”的定义,并且找不到可接受类型为“LINQPad.User.RA_MonthlyReportTemp”的第一个参数的扩展方法“Count”(是否缺少 using 指令或程序集引用?)
select new { Name ="zs", Count =o.Count(o=>o.date>'2013-01-01') };你没有using using System.Linq;?
http://blog.csdn.net/zjzhong/article/details/9269095
var q = from t in tablename
where t.date>'2013-01-01'
group t by t.zs into temp
select new
{
Key = temp.Key,
Count = temp.Count()
};
select 'Month total' as MonthTotal,count(1) as Num from tablename
结果:
MonthTotal Num
Month total 20
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);
}
}
}
http://blog.csdn.net/zjzhong/article/details/9269095