C#之Linq讲解

C#之Linq讲解

LINQ(Language Integrated Query)即 语言集成査询。
LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。

LINQ是一种用于.NET Framework的编程模型,旨在将数据查询与编程语言集成在一起。它解决了过去开发者需要为不同类型的数据使用不同语法和API进行查询和操作的问题。通过LINQ,开发者可以使用统一的语法在.NET语言(如C#)中执行查询操作,而无需了解底层的数据源类型和查询方式。

LINQ是一组语言特性和API,允许编写C#或Visual Basic代码以操作内存数据的方式查询数据库。通过使用查询语法,可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。LINQ总是使用对象,因此可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据库以及任何其他可用的LINQ提供程序格式的数据。

LINQ主要包含三个部分,其中LINQ to Objects主要负责对象的查询。通过LINQ,开发者可以消除编程语言和数据库之间的不匹配,并为不同类型的数据源提供单个查询接口。

LINQ to Objects
主要负责对象的查询
LINQ to XML
主要负责XML的查询
LINQ tO ADO.NET
主要负责数据库的查询

不使用Linq,使用foreach情况下的操作

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp12
{


    public class DataSource
    {
       public static int[] getIntArray()
        {
            return new int[] { 1, 99,2, 3, 4, 55, 3, 655, 45, 66, 88 };
        }
    
    }



    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[] arr = DataSource.getIntArray();
            List<int> list = new List<int>();


            // 方案1
            foreach (var item in arr)
            {
                if (item%2==0)
                    list.Add(item);
            }

            foreach(var item in list)
            {
                Console.WriteLine(item);
            }


        }
    }
}

在这里插入图片描述

委托的实现

Lambda表达式实现

Linq实现

            // 方案1
            Console.WriteLine("方案1");
            foreach (var item in arr)
            {
                if (item%2==0)
                    list.Add(item);
            }

            foreach(var item in list)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("方案2");


            list = arr.Where(p=>p%2==0).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp12
{


    public class DataSource
    {
       public static int[] getIntArray()
        {
            return new int[] { 1, 99,2, 3, 4, 55, 3, 655, 45, 66, 88 };
        }
    
    }



    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[] arr = DataSource.getIntArray();
            List<int> list = new List<int>();


            // 方案1
            Console.WriteLine("方案1");
            foreach (var item in arr)
            {
                if (item%2==0)
                    list.Add(item);
            }

            foreach(var item in list)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("方案2:Ling方法查询");


            list = arr.Where(p=>p%2==0).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }


            Console.WriteLine("方案3:Ling查询");

            var query = from val in arr where val%2==0 select val;
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }
        }
    }
}

在这里插入图片描述

扩展方法

扩展方法
首先扩展方法声明在静态类中。

扩展方法能够使你向现有类型添加新的方法,而无需创建新的派生类型,重新编译或以其他方式修改
原始类型。

扩展方法是一种特殊的静态方法。但可以象扩展类型上的实例方法一样调用。

他们的第一个参数指定该方法作用于那个类型,并且该类型以this 关键字修饰符为前缀。

    public static class LingExtention
    {
        /// <summary>
        /// 扩展方法
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="findWhere"></param>
        /// <returns></returns>
        public static IEnumerable<int> where(this int[] arr,findWhere findWhere)
        {
            foreach (var item in arr)
            {
                if(findWhere(item))
                {
                    yield return item;
                }
            }
        }
    }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp12
{

    public delegate bool findWhere(int item);
    public class DataSource
    {
       public static int[] getIntArray()
        {
            return new int[] { 1, 99,2, 3, 4, 55, 3, 655, 45, 66, 88 };
        }
    
    }

    public static class LingExtention
    {
        /// <summary>
        /// 扩展方法
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="findWhere"></param>
        /// <returns></returns>
        public static IEnumerable<int> where(this int[] arr,findWhere findWhere)
        {
            foreach (var item in arr)
            {
                if(findWhere(item))
                {
                    yield return item;
                }
            }


        }
    }


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[] arr = DataSource.getIntArray();
            List<int> list = new List<int>();


            // 方案1
            Console.WriteLine("方案1");
            foreach (var item in arr)
            {
                if (item%2==0)
                    list.Add(item);
            }

            foreach(var item in list)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("方案2:Ling方法查询");


            list = arr.Where(p=>p%2==0).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }


            Console.WriteLine("方案3:Ling查询");

            var query = from val in arr where val%2==0 select val;
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("方案4:Ling扩展方法");
            var query2 = LingExtention.where(arr, p => p % 2 == 0);

            foreach (var item in query2)
            {
                Console.WriteLine(item);
            }




        }
    }
}

在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值