关于LINQ的半知半解

来源:互联网 发布:男士商务单肩包 知乎 编辑:程序博客网 时间:2024/06/13 08:11

  看了一下LINQ,之前一点儿概念都没有,所以看完之后朦朦胧胧。所以总结一下,希望能再明白一点儿。

 首先,LINQ的作用就是用相同的语法访问不同的数据源,包括文件,XML,数据库,注册表,事件日志,活动目录或者第三方(如Fickr)数据。LINQ可以将上述数据做为对象使用,能够更好地与编程模型集成,LINQ的目标是降低访问数据的复杂度。
  LINQ包括5个部分:LINQ to Objects,LINQ to DataSets,LINQ to SQL,LINQ to Entities和LINQ to XML。所有的LINQ查询都包括三个不同的操作:获取数据源,创建查询,执行查询。
 下面写出几个简单的使用方法,先从简单的开始
  LINQ to XML:它是使用LINQ查询和过滤XML数据的技术。他在System.Xml.Linq命名空间中定义了基于元素的新XML类,而System.Xml类是基于文档的。
 
   //获取数据源
      XmlDocument doc = new XmlDocument();
      string path = Server.MapPath("a.xml");
      XElement stulist = XElement.Load(path);

   //创建查询
      var stus = from r in stulist.Elements("学生")
                      where r.Element("性别").Value == "男"
                      orderby r.Element("姓名")
                      select r;
      foreach (XElement node in stus)
       {
           Response.Write(node);
       }

  LINQ to Objects:

   //获取数据源
      List<Man> manlist = new List<Man>();
      manlist.Add(new Man("李天平", "男"));
      manlist.Add(new Man("李嘉诚", "男"));
      manlist.Add(new Man("徐静蕾", "女"));
   //创建查询
      var mans = from r in manlist
                       where r.Sex == "男"
                       orderby r.Name descending
                       select r;
   //执行查询
     foreach (Man man in mans)
     {
           Response.Write(man.Name + "," + man.Sex + "<br>");
     }

  LINQ to SQL:使用LINQ to SQL查询访问数据库,必须对对象类和数据库中的表建立映射,指定哪个属性映射哪个字段。为实现映射,LINQ提供了DataContext类。
  DataContext类在System,Data.Linq命名空间下,用于把查询语法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
   //定义映射类
      [Table(Name="P_Product")]
      public class Product
      {
          [Column(IsPrimaryKey=true)]
          public int ID{get; set;}

          [Column(Name="Name")]
          public string Name{get; set;}

          [Column(Name="Desc")]
          public string Desc{get; set;}
       }
   //获取数据源
      string connectionString = "data source=127.0.0.1;Database=test;user id=sa;password=";
      DataContext db = new DataContext(connectionString);
      Table<Product> prolist = db.GetTable<Product>();
  //创建查询
      var pros = from p in prolist
                      where p.Price > 1
                      orderby p.ID
                      select p;
  //执行查询
     foreach (Product pro in pros)
     {
          Response.Write(pro.Name + "," + pro.Price.ToString() + "<br>");
      }

   由此可见,三种查询的步骤基本都是:获取数据源,创建查询,执行查询(LINQ to SQL 还要创建映射类)
   因为上述数据源的数据类型都是数组类型,而数组类型默认支持泛型IEnumberable<(Of<T>)>接口。。。我好像不是很明白。。。这样才使得LINQ在执行查询的时候可以使用foreach来实现对数据的迭代式访问。

   先写这么多,隔了两天,而且在写的时候有重新想了一下,收获还是有的,这里面的代码都是书上的,不是我自己编的,notice。
0 0
原创粉丝点击