ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LINQ查询技术入门

2022-01-03 17:33:21  阅读:131  来源: 互联网

标签:Console 入门 nums list LINQ 查询 item Select


LINQ简介

LINQ能够解决什么问题

在NET平台开发中,面向对象编程语言与数据访问方法长期分离,数据访问通过SQL进行查询,这种嵌入SQL语句的方式极容易出现错误。

SQL和XML都有各自的查询语言,而对象没有自己的查询语言。

再比如,要从List<T>集合或数组中找到符合要求的元素,非常困难。

什么是LINQ

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

LINQ主要包含以下三个部分:

  • LINQ to Objects主要负责对象的查询;
  • LINQ to XML主要负责XML的查询;
  • LINQ to ADO.NET主要负责数据库的查询;
    • (1)LINQ to SQL;
    • (2)LINQ to DataSet;
    • (3)LINQ to Entities;

LINQ所在命名空间

  • SyStem.Linq;该命名空间由系统自动引入。

使用和不使用LINQ查询的对比

  • 不使用LINQ

    #region 示例1:不使用LINQ查询
    int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
    List<int> list = new List<int>();
    foreach (int item in nums)
    {
        if (item %2 !=0)
        {
            list.Add(item);
        }
    }
    list.Sort();
    list.Reverse();
    foreach (int  item in list)
    {
        Console.WriteLine(item);
    }
    Console.ReadLine();
    #endregion
    
    • 使用LINQ查询

      #region 示例2:使用LINQ技术查询数组
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = from num in nums 
          where num % 2 != 0 
          orderby num descending
          select num;
      foreach (int item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      

      LINQ查询简单、直观、明了。

    LINQ查询方法

    1. 获取数据:扩展方法Select()

      • Select()是一个泛型扩展方法,Select方法里面是一个Lambda表达式,返回结果是一个迭代器(Iterator
      • Select()方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)

      Select()方法应用

      #region 示例3:Select()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums.Select(item => item * item);
      foreach (int item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      
    2. 筛选数据:Where()方法

      • Where()方法是一个泛型扩展方法
      • Where()方法使用的时候要求传递一个委托实列,但该实例是一个判断条件,因此返回的类型必需是bool类型

      Where()方法应用

      #region 示例4:Where()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums.Where(item => item % 2 == 0).Select(i => i * i);
      foreach (int  item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      
    3. 排序数据:OrderBy()方法

      • OrderBy()是一个扩展方法
      • OrderBy()里面的参数要求传递一个排序的字段,默认按照升序排列
      • 如果想降序排列可以使用OrderByDescending方法

      OrderBy()方法应用

      #region 示例5:OrderBy()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums
          .Where(item => item % 2 == 0)
          .Select(i => i * i)
          .OrderByDescending(item => item);
      foreach (var item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      

      字符串数组排序:

      #region 示例6:字符串排序
      string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" };
      var list = nums
          .Where(item => item.Length == 2)
          .Select(item => item)
          .OrderBy(item => item.Substring(0, 1));
      foreach (var item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadLine();
      #endregion
      
    4. 分组数据:GroupBy()方法

      • OrderBy()是一个扩展方法
      • OrderBy()里面的参数要求从传递一个分组的字段

      GroupBy()方法应用

      #region 示例7: GroupBy()方法应用
      string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" };
      var list = nums
            .Where(item => item.Length == 2)
            .Select(item => item)
            .GroupBy(item => item.Substring(0, 1));
      foreach (var groupitem in list)
      {
          Console.WriteLine("---------------");
          Console.WriteLine("分组字段:{0}", groupitem.Key);
          foreach (var item in groupitem) // 内层循环遍历分组项
          {
               Console.WriteLine(item);
          }
      }
      Console.ReadLine();
      # endregion
      

标签:Console,入门,nums,list,LINQ,查询,item,Select
来源: https://www.cnblogs.com/holychan/p/15759990.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有