• LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步


    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码.

    之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨, 真有一种心血来潮想追赶的冲动.

    所以, 还是决定系统的学习一下LINQ.

    (1.4) LINQ to Objects

    这是一个简单的hello world性质的例子.

     1  var words = new List<string>() { "hello", "wonderful","linq","beautiful","world"};
     2             var res = from s in words
     3                       where s.Length <= 5
     4                       select s;
     5             Console.WriteLine("输出串长度<=5的单词:" + Environment.NewLine);
     6             foreach (var m in res)
     7             {
     8                 Console.WriteLine(m);
     9             }
    10 
    11             //按字母顺序对一个单词进行排序,然后按照其长度进行分组,并按照其中包含的单词长度逆序排列各组.
    12             Console.WriteLine(Environment.NewLine + "按长度分组排序显示:" + Environment.NewLine);
    13             var res1 = from s in words
    14                        orderby s ascending                      //ascending升序
    15                        group s by s.Length into lengroup
    16                        orderby lengroup.Key descending          //descending降序
    17                        select new { Length = lengroup.Key, Words = lengroup };
    18             foreach (var m in res1)
    19             {
    20                 Console.WriteLine("单词长度:" + m.Length);
    21                 foreach (var str in m.Words)
    22                     Console.WriteLine(" " + str);
    23             }

    结果如下图:

     

    现在, 对于List<>进行数据处理, 我就只用 LINQ to Objects了.

    (1.5) LINQ to XML 初步

     上代码:

     1 class Book
     2     {
     3         public string Publisher;
     4         public string Title;
     5         public int Year;
     6 
     7         public Book(string title, string publisher, int year)
     8         {
     9             this.Title = title;
    10             this.Publisher = publisher;
    11             this.Year = year;
    12         }
    13     }
     1  Book[] books = new Book[]{
     2                 new Book("Ajax in Action","Manning",2005),
     3                 new Book("Windows Froms in Action","Manning",2006),
     4                 new Book("Rss and Atom in Action","Manning",2006)
     5             };
     6             XElement xml = new XElement("books",
     7                 from s in books
     8                 where s.Year == 2006
     9                 select new XElement("book",
    10                     new XAttribute("title", s.Title),
    11                     new XElement("publisher", s.Publisher)
    12                     ));
    13             Console.WriteLine(xml);

    结果如下图:

    看上去LINQ to XML从表达上比DOM更加形象.这代码和它生成的XML结构基本上是"所见即所得"的.

    另外, LINQ to XML是以元素为中心的, 而DOM是以文档为中心的.

    (1.6) LINQ to SQL

     下面的代码的几点说明:

    1. 首先需要定义一个实体类, 用以和Northwind数据的Contacts数据表关联起来.

        本文所用的Northwind数据是微软提供演示的, 你可以自己去下. 也可以自己创建一个.

    2. 自定义属性 [Table(Name = "Contacts")], 这个你得引入System.data.linq, 否则你懂的.

    3. 自定义属性 [Column(Name = "Name")], 在代码中用于定义与数据表中列的对应关系.

     1 static class HelloLinqToSql
     2     {
     3         [Table(Name = "Contacts")]
     4         public class Contact
     5         {
     6             [Column(IsPrimaryKey = true)]
     7             public int ContactID { get; set; }
     8             [Column(Name = "Name")]
     9             public string Name { get; set; }
    10             [Column]
    11             public string City { get; set; }
    12         }
    13     }

    4. DataContext是设备上下文, 你肯定知道是用来传入连接字符串的

    5. 连接字符串中的 security=SSPI 使用windows自带的安全验证机制, 不用输入用户名与密码.

    6. DataContext.GetTable<>, 这个是泛型的, 注意到没有? 允许你操作强类型对象.

     1  DataContext db = new DataContext(@"server=(local);integrated security=SSPI;database=Northwind");
     2 
     3             var contacts =
     4               from contact in db.GetTable<HelloLinqToSql.Contact>()
     5               where contact.City == "武汉"
     6               select contact;
     7 
     8             Console.WriteLine("查找在武汉的联系人"+Environment.NewLine);
     9             foreach (var contact in contacts)
    10                 Console.WriteLine("联系人: " + contact.Name.Trim()+" ID:"+contact.ContactID);

    结果如下图:

    这个效果, 真是颠覆了我对关系数据库操作认知! 

    下面的事, 都被LINQ承包了:

    • 打开数据库连接
    • 生成SQL查询
    • 执行SQL查询
    • 将执行结果填充至对象中

    原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/

  • 相关阅读:
    springmvc中@PathVariable和@RequestParam的区别
    Spring MVC 学习总结(一)——MVC概要与环境配置
    web中session与序列化的问题
    EL表达式
    JSTL自定义标签
    [c++][语言语法]stringstream iostream ifstream
    [C++][语言语法]标准C++中的string类的用法总结
    [数据库]数据库查询语句
    [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
    机器学习算法汇总
  • 原文地址:https://www.cnblogs.com/hackpig/p/5806090.html
Copyright © 2020-2023  润新知