首页 > 其他分享 >一、LINQ简介

一、LINQ简介

时间:2023-10-15 17:06:14浏览次数:32  
标签:int 简介 LINQ 查询 item Score 数据源

一、什么是LINQ

长期以来,开发社区形成以下的格局:
1、面向对象与数据访问两个领域长期分裂,各自为政。

2、编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如:
  C#中字符串用string数据类型表示。
  SQL中字符串用NVarchar/Varchar/Char数据类型表示。

3、SQL编码体验落后
  没有智能感知效果。
  没有严格意义上的强类型和类型检查。

4、SQL和XML都有各自的查询语言,而对象没有自己的查询语言。
上面描述的问题,都可以使用LINQ解决,那么究竟什么是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的优势

1、熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。
2、更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。
3、可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。
4、标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。
5、类型检查:程序会在编译的时候提供类型检查。
6、智能感知提示:LINQ为通用集合提供智能感知提示。
7、整形数据:LINQ可以检索不同形状的数据。

三、LINQ的操作步骤

所有的Linq查询操作都由以下三个不同的操作组成:
1.获得数据源
想要使用Linq进行查询,数据源必须支持IEnumerable或IEnumerable(T)泛型接口或派生接口(如泛型的IQueryable(T)接口)。
2.创建查询

查询指定要从数据源中检索的信息
查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化
查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询的工作更加容易,C#引入了新的查询语法
3.执行查询

查询变量本身只是存储查询命令。实际的查询执行会延迟在foreach语句中循环访问变量时发生。此概念称为“延迟执行”。
强制立即执行,可以通过以下两个方法,使得Linq立即执行查询
执行聚合函数(Count、Max、Average、First)。
调用ToList(<T>Source)或ToArray(<T>Source)方法缓存结果。

四、LINQ的案例

案例一:

学生类

//學生類
    public class Student
    {
        private string name;
        private List<int> score;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }

        public List<int> Score
        {
            get
            {
                return score;
            }
            set
            {
                score = value;
            }
        }
    }

 数据查询

//数据源
IList<Student> students = new List<Student>
{
    new Student{ Name="Kevin", Score=new List<int>{89,93,88,78}},
    new Student{ Name="Jackie",Score=new List<int>{92,87,83,91}},
    new Student{ Name="Helen",Score=new List<int>{53,76,72,62}}
};
            //所有的Linq查询操作都由以下三个不同的操作组成:
            //1.获得数据源
            //2.创建查询
            //3.执行查询

            //使用复合from子句查询命令
            var getStudent =
                    from student in students
                    from score in student.Score
                    where score > 90
                    select new { Name = student.Name, Score = score };

            foreach (var st in getStudent)
            {
                Console.WriteLine("NAME:{0},SCORE:{1}",st.Name,st.Score);
            }

结果:





一、LINQ简介_数据源

我们可以看到学生对象中有个Score属性,Score属性本身就是List集合,这时候我们就要用到复合from子句进行查询了。首先遍历学生对象集合中的每个学生对象,然后在用另一个from子句,对每个学生对象中的Score属性进行遍历,筛选出含有90分以上的学生信息进行返回。

案例二:

namespace Demo
{
    // 定义委托
    delegate bool FindEven(int item);

    class IntExtension
    {
        public static int[] where(int[] array, FindEven dele)
        {
            int[] result = new int[5];
            int i = 0;
            foreach (int item in array)
            {
                if (dele(item))//调用下面的 delegate (int item)
                {
                    result[i] = item;
                    i++;
                }
            }

            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;
                //return item % 2 != 0; 奇数
            }).ToList();
            // 正序排序
            list.Sort();
            // 反转
            list.Reverse();
            // 输出
            Console.WriteLine(string.Join(",", list));

            Console.ReadKey();
        }
    }
}

 结果:





一、LINQ简介_List_02

通过泛型委托实现对Int数组ints实现偶数输出并排序;


技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!

开源库地址,欢迎点亮:

GitHub: https://github.com/ITMingliang

Gitee:  https://gitee.com/mingliang_it

GitLab:  https://gitlab.com/ITMingliang

建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群

一、LINQ简介_SQL_03


标签:int,简介,LINQ,查询,item,Score,数据源
From: https://blog.51cto.com/u_16244728/7872599

相关文章

  • 【ARMv8基础篇】CCI-400控制器简介
    CCI(CacheCoherentInterconnect)是ARM中的cache一致性控制器。CCI-400将互连和一致性功能结合到一个模块中。它支持多达两个ACE主节点的连接,例如:Cortex®-A7processorCortex-A15processorCortex-A17processorCortex-A53processorCortex-A57processorCCI-400还支持......
  • 信息学奥赛简介
    NOIP:全国青少年信息学奥林匹克联赛是教育部认可的五大学科(数学,物理,化学,生物,信息学)竞赛之一,由1984中国计算机学会(CCF)创办,联赛分为普及组和提高组。复赛可以使用c,c++,Pascal语言,2022年后只能使用c++。CSP-J/S:2019年CCF推出CSP(软件能力认证),CSP-J/S(非专业级别认证),CSP-J......
  • 【Unity3D】Shader Graph简介
    1ShaderGraph简介​ShaderGraph是Unity官方在2018年推出的Shader制作插件,是图形化的Shader制作工具,类似于Blender中的ShaderEditor和UE中的MaterialEditor,它使用流程图的形式表达顶点变换和片元着色的流程,通过节点(Node)的连接实现各种复杂的特效,关于节......
  • Axios简介
    什么是Axios全称ajaxI/Osystem基于Promise用于浏览器和nodejs的HTTP客户端axios提供了对AJAX的良好封装学习Axios的前提是学习Ajax,可以看看我的另一篇关于Ajax的博客Axios特点在浏览器中创建XMLHttpRequest请求在node.js中发送http请求支持Promis......
  • 向量化操作简介和Pandas、Numpy示例
    Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。 https://avoid.overfit.cn/post/ae2f68c9b2a548b59629755a05......
  • 华为云常见术语简介
    常见术语             说明VPCvpc(Virtual Private Cloud)是虚拟私有云的简称,它是用户在华为云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务。弹性IP在互联网上用户可以通过弹性IP访问所绑定到的设......
  • 可以用于科学计算和数据分析项目的工具简介
    在科学计算和数据分析项目中,有许多工具可以使用。以下是一些常用的工具和库:1.Python:Python是一种功能强大的编程语言,它提供了众多用于科学计算和数据分析的库和工具,如NumPy、Pandas、Matplotlib、SciPy等。Python具有简单易学的语法和丰富的生态系统,非常适合进行数据处理、建模......
  • EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)
    背景介绍:1.OperateLogInfo:日志表2.SystemUserInfo:用户表需求:查询日志表,要根据日志表的创建人id查询出创建人姓名(日志表连接用户表)publicstaticstringTest(){stringresult=null;varsqlLogs=newList<string>();......
  • Netty简介
    1.Netty概述Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端Netty的内部实现是很复杂的,但是Netty提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。Netty是最流行的NIO框......
  • 2. Vue简介
    三大问题(是什么,为什么,怎么办):Vue是帮助前端优化开发的一个工具,是一个框架渐进式框架的概念Vue2-->Vue3......