使用微软.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_

如何使用linq操作datatable进行分组的更多相关文章

  1. Linq 操作DataTable

    class ClientStruct { public string ID = "ID"; public string Name = "Name"; publi ...

  2. Linq实现DataTable的分组统计

    DataTable dt = GetTestData(10); //获取10条测试数据 var queryByService = from r in dt.AsEnumerable() group r ...

  3. C# 中 Linq 操作 DataTable

    方法一:更简洁 Console.WriteLine(dt.Rows.OfType<DataRow>().First(x => x.Field<string>(" ...

  4. Linq操作DataTable

    IEnumerable<DataRow> q = from dr in dt.AsEnumerable()                          where dr.Field& ...

  5. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  6. 关于Linq对DataTable和List各自的两个集合筛选的相关操作技巧

    项目中用到了对两个集合的帅选等操作,简单总结下 1.Linq操作多个Datable 可以通过AsEnumerable()方法对DataTable进行Linq操作 //获取数据表所有数据 DataTab ...

  7. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  8. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  9. 【转】Linq实现DataTable行列转换

    出处:http://www.cnblogs.com/li-peng/ 转换前的table: 转换后的table: 代码里有详细的说明, 还有一些参数我都截图了下面有 using System;usin ...

随机推荐

  1. 开源Math.NET基础数学类库使用(12)C#随机数扩展方法

    原文:[原创]开源Math.NET基础数学类库使用(12)C#随机数扩展方法                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...

  2. scrot-0.8

    相关库下载地址:         www.sunfreeware.com/programlistsparc10.html tar -zxvf scrot-0.8.tar.gzcd scrot-0.8. ...

  3. sharepoint 2013 个人网站公共母板页路径地址

    C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\FEATURES\MySiteUnif ...

  4. 栈上分配存储器的方法 alloca 抽样

    声明一个局部变量,必须分配在堆栈上,但有或没有它的方法 当然,,那是 alloca 下面的代码显示了可变长度参数转换,alloca 要使用 int main(int argc, char ** arg ...

  5. 流动python - 自然装饰

    好多人搞非常复杂的装饰,其实本质easy. 首先,这是什么装饰?发现穿着在代码@xxx帽子,它是装饰. 它是由如何定制它装饰? 其实不管什么人需要一个参数callable用来做装饰器,比方函数和类.为 ...

  6. 移动端 iphone touchmove滑到边界(浏览器地址拦及以上) touchend失效解决办法

    在移动端h5页面:尤其那些全屏幕的盒展示切换页面,当用户无意中将手指滑到了 浏览器地址拦以上(中国移动这快区域):此时,手指已经离开屏幕了,但是ios上无法监听到touchend 事件:touchen ...

  7. HTTP协议中返回代码302的情况

    http协议中,返回状态码302表示重定向. 这样的情况下,server返回的头部信息中会包括一个 Location 字段,内容是重定向到的url

  8. Codeforces Round #256 (Div. 2) D. Multiplication Table

    主题链接:http://codeforces.com/contest/448/problem/D 思路:用二分法 code: #include<cstdio> #include<cm ...

  9. HDU1061-Rightmost Digit(高速功率模)

    pid=1061">主题链接 题意:求n^n的个位数的值. 思路:高速幂求值 代码: #include <iostream> #include <cstdio> ...

  10. EnumMap demo

    优点:常量做为Key,在编译期就确定了.Enum做为key,在运行时也可以改变 package enumdemo; import java.util.EnumMap; import java.util ...