zoukankan      html  css  js  c++  java
  • 如何使用linq操作datatable进行分组

           使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作,要知道操作数据库的,我们比较容易得到的是 datatable,而得到 list<>集合的性能会降低,很多情况下,我们需要对我们的datatable进行操作,很多想到了的对datatable进行逐行或者 逐列进行遍历,但是如果要对datatable进行分组 那就没有办法了,在找了很多资料之后,我发现很多 提供的linq的操作 datatable 是错的,所以我希望把我研究后的datatable的使用linq的方法分享下!!!!!
           在我研究了近两天后,终于找到了 不会报错的linq操作的  分组了!!!

           //接下来我们得到一个sql语句,jobdate工作时间(datetime数据类型)UserName(string数据类型)
           //我们通过sql语句得到我们 查询表UserLogin所有的记录了
            DataTable dt = GetData<DataBase.MyoA>.getTableBysql("select *   from UserLogin"); 
          //接下来我们要对datatable进行分组,我们可以这样理解  
       //要知道datatable 由row组成,(一个表由多个行组成)
       //当让我们要知道datatable需要使用AsEnumerable()的方法才能遍历
            var grouped2 = from row in dt.AsEnumerable()
                               orderby row["jobdate"] ascending    //  我们获得其中一列的方法类似
                                //下面我们要进行分组,因为分组之后我们就已经不是datatable  ,而是一个我们
                               //所需要的一组集合,分组后我们变成了valueGroup
                               group row by new { UserName = row["UserName"] } into valueGroup
                               //下面我们可以对分组后的数据进行取最大值,获得进行统计
                               select new { username = valueGroup.Key.UserName, Value = valueGroup.Key,
           jobdate = valueGroup.Max(jobdate => jobdate["jobdate"]), count = valueGroup.Count() };   

        这个时候我们要需要对转化成datatable怎么办呢?
      
       //  首先我们要建立与他们对应的 datatable,然后我们来进行遍历
         DataTable dt2=new DataTable();
                dt2.Columns.Add("username",typeof(System.String));
                dt2.Columns.Add("jobdate",typeof(System.DateTime));
                foreach (var ig in grouped2)
                {
                    DataRow dr = dt2.NewRow();
                    dr["username"] = ig.username;   //这个是对得到了集合进行取值的方法
                    dr["jobdate"] = ig.jobdate;
                    dt2.Rows.Add(dr);
                } 


       网上我看到了很多对 datatable进行分组操作的例子,但是绝大多数的操作都是错的,就是会报错,只有这个才是会不会报错了。 

    本人QQ地址: http://user.qzone.qq.com/379069296/infocenter?ptsig=kRNgg5eaVPb57J3v5FxtpOiagwiYQg9vkSG871RxjCE_

  • 相关阅读:
    Android之基于XMPP即时通讯(转)
    开机启动service小DEMO
    Android 歌词同步滚动效果(转)
    OC中的消息传递和初始化
    oc中对象的初始化
    c语言的结构体字节数统计
    css的页面布局
    说一说我理解的css
    什么是js闭包
    我对js作用域的理解
  • 原文地址:https://www.cnblogs.com/liujing379069296/p/4123105.html
Copyright © 2011-2022 走看看