zoukankan      html  css  js  c++  java
  • LINQ To DataSet 几个常用示例

      本文是学习了黄忠成老师的《决战.net -.net framework 3.5》书中 LINQ To DataTable 的相关章节,

    并应用到自己的项目中,发现很受用,所以将其中几个示例,拿出来分享一下。

      如果在项目遇到这样的问题如:DataTable1和DataTable2需要根据一定的规则进行合并成一个DataTable3。

    问题1:DataTable1不是读数据库表的结果,而是合成的数据集,因此无法用SQL语句组合查询。

    问题2:DataTable1与DataTable2本身就是非常繁琐的查询且结果集非常大,这样如果DataTable1再与DataTable2

        组合查询则很容易发生SQL执行超时。

    遇到以上问题,第一个想法就是把两个DataTable,取出放至内存中用嵌套遍历的方式重组得到DataTable3.

    .net推出LINQ后就可以用这种更简洁易懂的类SQL语法的LINQ To DataTable 来解决以上问题。下面我例出几个示例分享。

    using System.Linq;
    using System.Text;
    using System.Data;

    1.基本方法:

     DataSet ds = new DataSet();
       adapter.Fill(ds, "Customers");//读数据库略

       var result = from s1 in ds.Tables["Customers"].AsEnumerable()

                                     where s1.Field<string>("Region") == "SP"   //转换成string后进行对比,如果为DBNull 则传回空字符串
                                     select s1;

       foreach (var item in result)
               Console.WriteLine(item["CustomerID"]);
       Console.ReadLine();

    2.指定DataRowVersion:

    var result = from s1 in ds.Tables["Customers"].AsEnumerable()
                                     where !s1.IsNull("Region") && (string)s1["Region"] == "SP"
                                     select s1;

    3. Join组合查询:

     var result = from s1 in ds.Tables["Customers"].AsEnumerable()
                                     join s2 in ds.Tables["Orders"].AsEnumerable() on
                                     s1.Field<string>("CustomerID") equals s2.Field<string>("CustomerID")
                                     where s2.Field<DateTime>("OrderDate") > DateTime.Parse("1997/1/1") &&
                                           s2.Field<DateTime>("OrderDate") < DateTime.Parse("1997/5/31")
                                     select new
                                     {
                                         OrderID = s2.Field<int>("OrderID"),
                                         CustomerName = s1.Field<string>("CompanyName"),
                                         OrderDate = s2.Field<DateTime>("OrderDate")
                                     };

    4.Group

      var result = from s in ds.Tables["Orders"].AsEnumerable()
                                     group s by s.Field<string>("CustomerID") into g
                                     select new
                                     {
                                         OrderID = g.First().Field<int>("OrderID"),
                                         CustomerID = g.Key
                                     };


    5.返回前10行数据

    var table = (from s1 in ds.Tables["Customers"].AsEnumerable() select s1).Take(10);

  • 相关阅读:
    二战后的一些战争启示(弱国无外交)
    为了生存人类必须去探索宇宙
    不同版本Eclipse对JDK版本要求
    string 转 java对象、转map的方式
    原生JS实现全选,反选
    oracle批量update
    HttpURLConnection 当作请求调用接口不带返回参数的工具类
    sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
    javamail 发送邮件demo(文字与附件)
    Linux ping不通百度的解决方法
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/1780214.html
Copyright © 2011-2022 走看看