一步一步学LINQ系列1---什么是LINQ?_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 一步一步学LINQ系列1---什么是LINQ?

一步一步学LINQ系列1---什么是LINQ?

 2015/4/23 3:04:11  china_fucan  程序员俱乐部  我要评论(0)
  • 摘要:一、本系列目标1、理解LINQ;2、能写得复杂的LINQ语句(比如:动态查询);3、理解表达式树及相关概念;4、熟练运用LINQ写出优美的代码(希望一起努力,最终达到);二、LINQ为何物?LINQ之争的销烟已经退去,如今,LINQ已经成为C#开发人必备技术之一。很多人用它写出了优美的代码,它已经成为处理数据的一种全新开发方式,这也许是你选择.NET作为开发平台的福利之一。越来越多的开源库、框架都大量地使用LINQ。不管是出于提高自身技能还是读懂别人的代码,它都得是被你我拿下的一块石头
  • 标签:什么

一、本系列目标

      1、理解LINQ;

      2、能写得复杂的LINQ语句(比如:动态查询);

      3、理解表达式树及相关概念;

      4、熟练运用LINQ写出优美的代码(希望一起努力,最终达到);

二、LINQ为何物?

   LINQ之争的销烟已经退去,如今,LINQ已经成为C#开发人必备技术之一。很多人用它写出了优美的代码,它已经成为处理数据的一种全新开发方式,这也许是你选择.NET作为开发平台的福利之一。越来越多的开源库、框架都大量地使用LINQ。不管是出于提高自身技能还是读懂别人的代码,它都得是被你我拿下的一块石头。接下来我将向大家介绍它,谈谈自己的一些认识,如有不恰当的地方欢迎指正。

1、LINQ是什么?

  一个通用的、语言集成的查询工具。使用这个工具,可以访问来自内存对象(LINQ to Objects)、数据库(LINQ to SQL)、XML文件(LINQ to XML)、文件系统等多种数据源中的数据。它是 Visual Studio 2008 中引入的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能,经受了时间的考验和沉淀。

  下面是查询内存对象数据源中数据传统方法和LINQ的写法:

 

class="brush:csharp;gutter:true;">       /// <summary>
        /// 输出数组中小于5的元素  
        /// </summary>
        public static void RraditionalMethod() {
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            //传统方法使用循环方式
            List<int> lowNums = new List<int>();
            for (int i = 0; i < numbers.Length; i++) {
                if (numbers[i] < 5) {
                    lowNums.Add(numbers[i]);
                }
            }

            Console.WriteLine("Numbers < 5:");
            foreach (var x in lowNums) {
                Console.WriteLine(x);
            }
        }

        /// <summary>
        /// 输出数组中小于5的元素 
        /// </summary>
        public static void LinqMethod() {
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            //LINQ写法
            var lowNums =
                from num in numbers
                where num < 5
                select num;

            Console.WriteLine("Numbers < 5:");
            foreach (var x in lowNums) {
                Console.WriteLine(x);
            }
        }

     也许你认为,查询内存对象数据源中数据的LINQ方法没有给我再来什么好处(至少从示例来看,代码数量差不多)。别急!我们来看看数据库中数据的操作再接着讨论,在没有LINQ之前,我们查询数据库(这里特指关系型数据库)中的持久化数据时要使用SQL语句,写代码时那红红(字符串在VS里的颜色)的SQL语句肯定给你带来了不少的麻烦吧? 也许是拼写错了一个字母,也许是写错字母顺序、也许……,编译器确没有给我们任何的提示。结果就挨了一个运行时异常。在一个复杂的系统里,解决这个问题花掉几个小时的时间是很正常的,更糟糕的是同样的错误经常发生!!!但有了LINQ后,我们使用LINQ to SQL,这个麻烦不会再来骚扰你了。请看下面的的示例,看你心动不心动。

        /// <summary>
        /// 查询订单编号少于5的订单号  传统写法
        /// </summary>
        /// <param name="connectionString"></param>
        private static void ReadOrderData(string connectionString) {
            string queryString =
                "SELECT * FROM dbo.Orders WHERE OrderID<5;";
            using (SqlConnection connection = new SqlConnection(
                       connectionString)) {
                SqlCommand command = new SqlCommand(
                    queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                try {
                    while (reader.Read()) {
                        Console.WriteLine(String.Format("{0}, {1}",
                            reader[0], reader[1]));
                    }
                }
                finally {
                    // 读完后关闭对象
                    reader.Close();
                }
            }
        }

 

       /// <summary>
        /// 查询订单编号少于5的订单号  LINQtoSQL写法
        /// </summary>
        public void ReadOrderDataByLinqToSql() {
            var q =
                from c in db.Orders
                where c.OrderID <5
                select c;
            ObjectDumper.Write(q);
        }

 三、为什么要使用LINQ

    从上面的对比中我们可以看出,LINQ会给我们带来如下好处:

    1、集成化,它把查询封装成C#(VB.NET)语法,获取了跟别的C#(VB.NET)语法一样的,高亮显示、类型检查。

           2、使用查询逻辑更加清晰。

    3、使用统一的查询语法处理内存对象、数据库、XML等数据源中的数据;

    4、提高了开发速度(上面的LINQ TO SQL示例);

    5、提高代码的可维护性、可扩展性(后面会介绍);

    别外,LINQ TO SQL可以有效的防止SQL注入,从来提高的系统的安全性。今天不早了,先洗洗睡了以防触死。如果对你有帮助,请点推荐支持,增加后面写作动力。如果有什么不当之处,再次恳请指正。

发表评论
用户名: 匿名