首页 > 其他分享 >CH07_Linq

CH07_Linq

时间:2024-11-19 10:46:40浏览次数:3  
标签:Console CH07 LINQ 查询 语法 Linq 子句

第7章:Linq


本章目标

  1. 掌握Linq的运用

本章内容

Linq概述

什么是Linq

Lanaguage Interated Query(语言集成查询),Linq 是集成C# 和VB这些语言中用于提供数据查询能力的一个新特性。Linq用于以对象形式管理关系数据,并提供了丰富的查询功能。

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

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

LInq支持的数据源
  • LINQ to Objects 主要负责对象的查询。
  • LINQ to XML 主要负责XML的查询。
  • LINQ to ADO.NET 主要负责数据库的查询。
    • LINQ to SQL
    • LINQ to DataSet
    • LINQ to Entities
Linq的优势

1、熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。

2、更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。

3、可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。

4、标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。

5、类型检查:程序会在编译的时候提供类型检查。

6、智能感知提示:LINQ为通用集合提供智能感知提示。

7、整形数据:LINQ可以检索不同形状的数据。

匿名类型
  1. 匿名类型是可以创建无名类型的一种类型,经常用于LINQ查询的结果中。

  2. 匿名类型只能和局部变量配合使用,不能用于类成员。

  3. 匿名类型没有名字,必须使用var关键字作为变量类型。

  4. 编译器为匿名对象创建的属性是只读的,所以不能设置匿名类型对象的属性。

  5. 格式:

    在这里插入图片描述

    static void Fun1()
    {
        var man = new { Name="孙悟空", Age = 25,  Sex='男' };
    
        Console.WriteLine("姓名:{0}, 年龄:{1}, 性别:{2}", man.Name, man.Age, man.Sex);
    }
    

方法语法和查询语法

初识查询语法和方法语法
  1. 我们使用LINQ查询时可以使用两种形式的语法:方法语法和查询语法。

  2. 方法语法:使用标准的方法调用,这些方法是一组叫做标准查询运算符的方法。方法语法命令式的,指明了查询方法调用的顺序。

  3. 查询语法:类似于SQL语句,使用查询表达式形式书写。查询语法是声明式的,查询描述的是你想返回的东西,但并没有指明如何执行这个查询。

    static void Fun2()
    {
        int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
        //查询语法
        IEnumerable<int> result1 = from n in nums
                                     where n > 4 && n < 8
                                     select n;
    
        //方法语法
        IEnumerable<int> result2 = nums.Where(x => (x > 4 && x < 8));//返回枚举
    
        //两种形式的组合
        int count = (from n in nums where n > 4 && n < 8 select n).Count();//返回单个值
    
        //查看结果
        foreach (int i in result1)
            Console.Write(i);
        Console.WriteLine();
    
        foreach (int i in result2)
            Console.Write(i);
        Console.WriteLine();
    
        Console.Write(count);
    
    }
    
查询变量
  • LINQ查询可以返回两种类型的结果,如下:

    • 枚举:包含了一组数据

    • 标量:一个单一的值

      在这里插入图片描述

  • 理解查询变量:

    • 如果查询表达式返回枚举,查询一直到处理枚举时才会执行。(延迟执行)
    • 如果枚举被处理多次,查询就会执行多次。
    • 如果在进行遍历之后,查询执行之前数据有改动,则查询会使用新的数据。
    • 如果查询表达式返回标量,查询立即执行,并把结果保存在查询变量中。

查询表达式的结构

查询表达式由查询体后的from子句组成。

  1. 子句必须按照一定的顺序。
  2. from子句和select…group这两部分是必需的。
  3. 其他子句是可选的。
  4. 可以有任意多的from…let…where子句。
from子句
  • from子句和foreach子句格式十分相似,但实际有很大区别:

    • foreach语句命令式指定了按顺序一个个访问集合中的项。from子句只是声明式地规定集合中的每个项都要访问,并没有指定顺序。
    • foreach在遇到代码时就执行其主体。from子句什么也不执行,只有在遇到访问查询变量的语句时才会执行。
  • 格式:

    • 在这里插入图片描述
  • 代码示例:

    static void Fun3()
    {
        int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
        var nums = from n in ints
                   where n > 7      //使用迭代变量n
                   select n;        //使用迭代变量n
    
        foreach (var n in nums)
            Console.WriteLine(n);
    }
    
join子句
  • 注意事项:

    • 使用联结来结合两个或更多集合中的数据。
    • 联结对象接受两个集合,然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段。
    • 字段只能使用equals比较,不能使用==
  • 格式:

    在这里插入图片描述

  • 代码示例:

    /// <summary>
    /// 学生
    /// </summary>
    class Student
    {
        /// <summary>
        /// 学号
        /// </summary>
        public string StudentNo { get; set; }
    
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
    
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
    
        /// <summary>
        /// 性别
        /// </summary>
        public char Sex { get; set; }
    }
    
    /// <summary>
    /// 成绩
    /// </summary>
    class Result
    {
        /// <summary>
        /// 学号
        /// </summary>
        public string StudentNo { get; set; }
    
        /// <summary>
        /// 科目
        /// </summary>
        public string Subject { get; set; }
    
        /// <summary>
        /// 分数
        /// </summary>
        public int Score { get; set; }
    }
    
    static void Fun4()
    {
        //学生
        Student[] students = new Student[] {
            new Student { StudentNo="GCKJ001", Name="曾令耀", Age=18,Sex='男' },
            new Student { StudentNo="GCKJ002", Name="李尚驰", Age=18,Sex='男' },
            new Student { StudentNo="GCKJ003", Name="黄朗云", Age=18,Sex='女' }
        };
    
        //成绩
       

标签:Console,CH07,LINQ,查询,语法,Linq,子句
From: https://blog.csdn.net/m0_37631902/article/details/143875027

相关文章

  • linq to mysql 查询_LinQ to SQL 查询(转)
    LINQtoSQL是将对象关系映射到.NET框架中的一种实现。它可以将关系数据库映射为.NETFramework中的一些类。然后,开发人员就可以通过使用LINQtoSQL对数据库中的数据进行查询、修改、插入、删除等操作。LINQtoSQL类映射到SQLServer数据库中的表,这些类被称做“实体类”,实体......
  • Net 9中LINQ新增特性
    在.NET9中,LINQ引入了一些新的特性和增强功能,以下是主要的新特性列表:1.AsQueryable()扩展方法对List<T>支持在.NET9中,List<T>类型现在支持调用AsQueryable()方法,将List<T>转换为IQueryable<T>,使得可以执行更复杂的LINQ查询,尤其是在与IQueryable数据源......
  • LINQ SelectMany的应用场景
     示例1:多层集合展平假设你有一个列表,每个元素都是一个字符串数组,你想将所有的字符串展平成一个单一的字符串列表。  示例2:嵌套循环假设你有一个用户列表,每个用户有一个订单列表,你想获取所有用户的订单列表。 示例3:多对多关系假设你有一个学生列表,每个学生选修......
  • LINQPad,我的C#/.NET学习诀窍
    LINQPad,我的C#/.NET学习诀窍 LINQPad,我的C#/.NET学习诀窍在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具——LINQPad。但许多客户面对我分享的.linq源文件都迷茫不知所措,因此有必要来聊聊一下这个强大的工具。本文首先将对该工具做个简单的介绍,并且分享一些LINQPad......
  • C# LINQ 查询报错:指定的转换无效
     usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Dynamic;usingSystem.Linq;usingSystem.Runtime.CompilerServices;usingSystem.Data.Linq;usingSystem.Data.Linq.Mapping;usingSystem.......
  • C# Linq 延迟查询的执行
    C#Linq延迟查询的执行 在定义linq查询表达式时,查询是不会执行,查询会在迭代数据项时运行。它使用yieldreturn语句返回谓词为true的元素。varnames=newList<string>{"Nino","Alberto","Juan","Mike","Phil"};varnamesWithJ=fromninnames......
  • C# Linq.FirstOrDefault、Linq.Where、Linq.AsParallel、List.Exists、List.Find、Dic
    C#Linq.FirstOrDefault、Linq.Where、Linq.AsParallel、List.Exists、List.Find、Dictionar.TryGetValue、HashSet.Contains性能的比较 今天我们来比较一下集合检索方法性能更优问题,测试代码publicclassEntity{publicintId{get;set;}publicintNo{......
  • 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能
    使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能 前言最近比较闲,(项目要转Java被分到架构组,边缘化人员,无所事事哈哈哈哈)记录一下前段时间用到的.NET框架下采用并行策略充分利用多核CPU进行优化的一个方法起因是项目中有个结算的方法,需要汇总一个月的数据......
  • .NET 9 中 LINQ 新增的功能
    .NET9中LINQ新增的功能 思维导航LINQ介绍安装.NET9VSCode中编写ASP.NETCoreWeb应用VSCode中创建.NET9控制台应用CountBy方法AggregateBy方法Index(IEnumerable) 方法参考文章C#/.NET/.NETCore拾遗补漏LINQ介绍语言集成查询(LINQ)是一系列直接......
  • 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能
    使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能 前言最近比较闲,(项目要转Java被分到架构组,边缘化人员,无所事事哈哈哈哈)记录一下前段时间用到的.NET框架下采用并行策略充分利用多核CPU进行优化的一个方法起因是项目中有个结算的方法,需要汇总一个月的数据......