• LINQ的简介(一)


    一、为什么要使用LINQ

    假设有一个整数类型的数组,找到里面的偶数并进行降序排序。

    在C#2.0以前,如果要实现这样的功能,我们必须使用'foreach'或'for'循环来遍历数组,先找到偶数然后在降序排序,相关代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace LinqOfSelectOperation
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 查询出数组中的偶数并排序
                int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
                // 定义一个整数类型的集合,用来存放数组中的偶数
                List<int> list = new List<int>();
                // 遍历数组查询出偶数放到集合中
                foreach (int i in ints)
                {
                    // 如果是偶数,把偶数加入到集合中
                    if (i % 2 == 0)
                    {
                        list.Add(i);
                    }
                }
    
                // 正序排序
                list.Sort();
                // 反转
                list.Reverse();
                // 输出
                Console.WriteLine(string.Join(",", list)); //66,32,4,2,0
                Console.ReadKey();
            }
        }
    }
    View Code

    使用for循环很麻烦,而且不可维护和可读。C#2.0引入了delegate,可以使用委托来处理这种场景,代码如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace LinqOfSelectOperation
    {
        //定义委托
        delegate bool FindEven(int item);
    
        class IntExtension
        {
            public static List<int> where(int[] array, FindEven del)
            {
                List<int> result = new List<int>();
                foreach (int item in array)
                {
                    if (del(item))
                    {
                        result.Add(item);
                    }
                }
                return result;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                // 查询出数组中的偶数并排序
                int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
    
                //delegate(int item){return item % 2 == 0;} 表示委托的实现
                List<int> list = IntExtension.where(ints, delegate(int item)
                {
                    return item % 2 == 0;
                });
    
                // 正序排序
                list.Sort();
                // 反转
                list.Reverse();
                // 输出
                Console.WriteLine(string.Join(",", list)); //66,32,4,2,0
                Console.ReadKey();
            }
        }
    }
    View Code

    虽然使用delegate可以使程序的可读性增加了,但是C#团队认为他们仍然需要使代码更加紧凑和可读,所以他们在C#3.0中引入了扩展方法、Lambda表达式、匿名类型等新特性,你可以使用C#3.0的这些新特性,这些新特性的使用LINQ的前提,可以用来查询不同类型的集合,并返回需要的结果。

    下面的示例演示了如何使用LINQ和Lambda表达式根据特定条件来查询数组,示例代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace LinqOfSelectOperation
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 查询出数组中的奇数并排序
                int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
    
                // 使用Lambda表达式查询数组中的偶数
                // int[] intEvens = ints.Where(p => p % 2 == 0).ToArray();
                // 使用LINQ查询数组中的偶数
                int[] intEvens = (from p in ints
                                  where p % 2 == 0
                                  select p).ToArray();
    
                // 使用LINQ和Lambda表达式查询数组中的奇数
                // int[] intOdds = ints.Where(p => p % 2 != 0).ToArray();
                // 使用LINQ查询数组中的奇数
                int[] intOdds = (from p in ints
                                 where p % 2 != 0
                                 select p).ToArray();
    
                // 输出
                Console.WriteLine("偶数:" + string.Join(",", intEvens));
                Console.WriteLine("奇数:" + string.Join(",", intOdds));
    
                Console.ReadKey();
            }
        }
    }
    View Code

    二、什么是LINQ

    LINQ(Language Integrated Query)即语言集成查询。

    LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。

    LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。

    LINQ主要包含以下三部分:

    1、LINQ to Objects      主要负责对象的查询。

    2、LINQ to XML           主要负责XML的查询。

    3、LINQ to ADO.NET   主要负责数据库的查询。

       LINQ to SQL

       LINQ to DataSet

       LINQ to Entities

    三、LINQ的优势

    • 熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。
    • 更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。
    • 可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。
    • 标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。
    • 类型检查:程序会在编译的时候提供类型检查。
    • 智能感知提示:LINQ为通用集合提供智能感知提示。
    • 整形数据:LINQ可以检索不同形状的数据。
  • 相关阅读:
    web页面前图标
    leetcode收获
    Shell统计函数耗时(实现数字运算)
    Shell判断数值是否存在于列表
    设置Ubuntu虚拟机硬件时间与系统同步
    Python捕获键盘中断^C方法(Ctrl-C)
    Shell创建zip文件不包含完整路径方法
    jquery判断复选框checkbox是否被选中
    php Base64编码/解码
    php二维数组排序
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12677721.html
Copyright © 2020-2023  润新知