当前位置:编程学习 > C#/ASP.NET >>

如何用linq生成select 'zs',count(*) from tablename

如题,
thanks in advantace... --------------------编程问答-------------------- 'zs'是字符串还是字段名? --------------------编程问答--------------------

var q = from o in tablename 
                    group o by o.zs into og
                    select new { Name = og.Key, Count = og.Count() };
--------------------编程问答-------------------- 我想得到的结果 如

zs 15 --------------------编程问答-------------------- 意思就是,如果想利用  Count 就得用 group by 是吧?

我看sql语句里,select 'zs', count(*) from table 这样是可以的,

就觉着是不是 linq 就可以生成同样的句子,而不加group by --------------------编程问答--------------------
引用 4 楼 xl_0715 的回复:
意思就是,如果想利用  Count 就得用 group by 是吧?

我看sql语句里,select 'zs', count(*) from table 这样是可以的,

就觉着是不是 linq 就可以生成同样的句子,而不加group by

zs是一个字符串常量的话,就不用groupby了。
var q = from o in table
                    
                    select new { Name ="zs", Count =table.Count() };
--------------------编程问答-------------------- 谢谢你及时回答。

但如果有where条件呢,我如何获取Count?

--------------------编程问答--------------------
引用 6 楼 xl_0715 的回复:
谢谢你及时回答。

但如果有where条件呢,我如何获取Count?

count()带上条件参数或者selectq前加上where子句 --------------------编程问答-------------------- var q = from o in table  
    where date>'2013-01-01'        
    select new { Name ="zs", Count =o.Count() };
我是想当然的这么写的,但不对... --------------------编程问答--------------------
引用 8 楼 xl_0715 的回复:
var q = from o in table  
    where date>'2013-01-01'        
    select new { Name ="zs", Count =o.Count() };
我是想当然的这么写的,但不对...

var q = from o in table  
    where o.date>'2013-01-01'        
    select new { Name ="zs", Count =o.Count() }; --------------------编程问答-------------------- 这个时候 用 o.Count 报错
我在 LINQPad中试着写,报错

Cannot execute text selection: “LINQPad.User.RA_MonthlyReportTemp”不包含“Count”的定义,并且找不到可接受类型为“LINQPad.User.RA_MonthlyReportTemp”的第一个参数的扩展方法“Count”(是否缺少 using 指令或程序集引用?) --------------------编程问答-------------------- var q = from o in table     
    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()
         };
--------------------编程问答-------------------- 版主理解错我意思了

我是想通过 linq得到 如下的sql语句:
select 'Month total' as MonthTotal,count(1) as Num from tablename
结果:
MonthTotal    Num
Month total   20 --------------------编程问答-------------------- 假如有一张表(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() });
 
            //用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 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,