zoukankan      html  css  js  c++  java
  • 再谈谈LINQ TO DataSet

    首先,这个功能是通过扩展方法来实现的,需要引用System.Data.DataSetExtensions这个程序集

    image

    其次,针对DataSet有两种情况

    第一种是非类型话的DataSet,下面代码是一个示例

    DataSet ds = new DataSet();

    using (SqlConnection conn = new SqlConnection("server=(local);database=northwind"))
    {
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "SELECT * FROM Customers";
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);

            adapter.Fill(ds, "Customers");

            cmd.CommandText = "SELECT * FROM Orders";
            adapter.Fill(ds, "Orders");
        }
    }

    DataRow defaultRow=ds.Tables["Orders"].NewRow();
    defaultRow["OrderID"] = -1;
    defaultRow["OrderDate"] = DateTime.Now;

    var query=from c in ds.Tables["Customers"].AsEnumerable()
              join o in ds.Tables["Orders"].AsEnumerable() on c.Field<string>("CustomerID") equals o.Field<string>("CustomerID") into g
              from item in g.DefaultIfEmpty(defaultRow)//这里是为了实现左外连接,因为有的客户可能没有订单
              select new{
                  CustomerID=c.Field<string>("CustomerID"),
                  CompanyName=c.Field<string>("CompanyName"),
                  OrderID=item.Field<int>("OrderID"),
                  OrderDate=item.Field<Nullable<DateTime>>("OrderDate")
              };

    foreach (var item in query)
    {
        Console.WriteLine(item);
    }

    现在我们可以针对不同的表直接进行JOIN或者其他所有的LINQ操作,例如ORDER BY,GROUP BY等等

    第二种是针对类型化的DataSet,也就是我们常说的强类型数据集。使用它们太方便了,就是对象操作。

    image

    所以,强烈建议要创建强类型的数据集

    image

    image

    如果是使用强类型的数据集,则读取数据及处理数据的工作都会变得很方便和可靠

    NorthwindDataSet northwind = new NorthwindDataSet();
               NorthwindDataSetTableAdapters.CustomersTableAdapter a = new NorthwindDataSetTableAdapters.CustomersTableAdapter();
               a.Fill(northwind.Customers);
               NorthwindDataSetTableAdapters.OrdersTableAdapter o = new NorthwindDataSetTableAdapters.OrdersTableAdapter();
               o.Fill(northwind.Orders);

               NorthwindDataSet.OrdersRow defaultrow=northwind.Orders.NewOrdersRow();
               defaultrow.OrderID=-1;
               defaultrow.OrderDate=DateTime.Now;

               var query = from customer in northwind.Customers
                           join order in northwind.Orders on customer.CustomerID equals order.CustomerID into orders
                           from item in orders.DefaultIfEmpty(defaultrow)
                           select new
                           {
                               CustomerID = customer.CustomerID,
                               CompanyName = customer.CompanyName,
                               OrderID = item.OrderID,
                               OrderDate=item.Field<Nullable<DateTime>>("OrderDate")
                           };

    本文由作者:陈希章 于 2009/7/17 9:19:38 发布在:http://www.cnblogs.com/chenxizhang/
    本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点:陈希章的博客中心
  • 相关阅读:
    最大子数组求和并进行条件组合覆盖测试
    Ubuntu 16.04 c++ Google框架单元测试
    The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu
    Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    个人博客作业三:微软小娜APP的案例分析
    补交 作业一
    补交 作业二:个人博客作业内容:需求分析
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第10次实验报告
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1525297.html
Copyright © 2011-2022 走看看