• 如何使用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_

  • 相关阅读:
    Redis接口限流
    CentOS7以下DNS失效问题
    Vue的安装与使用
    使用 REDIS保存SESSION信息
    ThinkPHP 阿里云图片上传
    Laravel6.0+easywechat4.1获取用户授权例子与分享示例
    1.oracle创建本地数据库步骤及导入数据
    16、React Native实战之TextInput组件
    14.React Native实战之Navigator组件初探
    13.React Native实战之Text组件
  • 原文地址:https://www.cnblogs.com/liujing379069296/p/4123105.html
Copyright © 2020-2023  润新知