C# LINQ

文章介绍了LINQ如何使数据处理变得更简单,通过委托、Lambda表达式的概念,展示了LINQ的高效性和简洁性。文中给出了使用LINQ筛选数组中大于10的数字的例子,并对比了手动实现的where方法,强调了LINQ提供的扩展方法如.where、.count()等在处理集合时的便利性。
摘要由CSDN通过智能技术生成
  1. 为什么要使用LINQ? LINQ能让数据处理变得更简单

  1. LINQ写出来的代码效率不一定是最高的。但是在性能可以忍受的情况下,用linq绝对是简单高效的

  1. 委托--> lambda-->linq

  1. 委托

  1. 什么叫委托

//指向方法的数据类型
class Program
{
    static void Main(string[] args)
    {
        D1 d1 = F1;   //不是D1 d1 = F1();不要加括号,加了就是调用F1这个方法了
        d1();
        d1 = F2;
        d1(3,5);
    }

    static void F1()
    {
        console.write("我是F1");
    }

    static void F2(int i ,int j)
    {
        console.write("我是F2");
        console.write(i+j);
    }
}

delegate void D1();

//执行结果
我是F1
我是F28
  1. 定义委托/自定义委托

  1. .net中定义了两个泛型委托,Action(无返回值)和Func(有返回值),所以一般不用自定义委托

//所以上面代码可以替代成
class Program
{
    static void Main(string[] args)
    {
        Action action = F1;
        action();
        Func<int i,int j> func = F2;
        func(3,5);
    }

    static void F1()
    {
        console.write("我是F1")
    }

    static void F2(int i ,int j)
    {
        console.write(i+j);
    }
}
  1. 委托还可以指向匿名的方法

  1. Action<int i,int j> action = delegate(int 1,int j){console.write("你好")}

  1. Lambda

  1. 省略方法名,(){}中间加 gsto--=>,就是lambda,参数的数据类型也可以省掉,因为编译器能够根据委托类型推断出参数的数据类型:

  1. Action<> action = delegate(int i,int j){console.write("你好")}

  1. Action<> action = (int i,int j)=>{console.write("你好")}

  1. Action<> action = (i, j)=>{console.write("你好")}

  1. 还有一种能够将{}也省略的情况:没有返回值,并且只有一行执行代码

  1. Action<> action = (i, j)=>console.write("你好")

  1. 甚至有返回值,并且语句只有一个,{}也可以直接省略掉

  1. Action<> action = (i, j)=> i+j

  1. 更甚至如果参数只有一个,那么参数的()也可以省掉

  1. Action<> action = i => i+5

  1. 下面开始正式学习LINQ的方法

  1. LINQ一个很神奇的地方就是为我们集合的拓展提供了很多的方法,这些拓展的方法能够极大的简化数据处理。比如说我们这里有一个数组,我要获取其中大于10的那个数,大家想想可以怎么实现

  1. 首先想到的是可以使用for循环,然后挨个遍历,对不对;其实可以使用LINQ

  1. 实现代码如下:

  1. int[] arry = new int[]{3,11,5,99,33,42,15,7,55};

  1. IEnumerable<int> items = arry.where(i=>i>10); //注意arry.不会提示where ,因为不是arry自带的,是一个扩展方法,所以需要引用System.linq

  1. 不用linq,自己手写一个where方法

static IEnumerable<int> where(IEnumerable<int> items,Func(int i,bool b) f1)
{
    int[] arry = new int[]{};
    foreach(int i in items)
    {
        if(f1(i))
        {
            arry.ADD(i);
        }
    }
    return arry;
}

//使用yield效率更高,上面是全部执行完成以后,将数据一起返回,yield则是一边处理一边返回,效率更高
static IEnumerable<int> where(IEnumerable<int> items,Func(int i,bool b) f1)
{
    int[] arry = new int[]{};
    foreach(int i in items)
    {
        if(f1(i))
        {
            yield return i;
        }
    }
}
  1. linq的一些方法:

  1. 数组、list、字典、set...他们都是实现了IEnumerable接口的,因此可以使用 IEnumerable的扩展方法,比如.where、.count()、.Any()【是否至少有一条数据满足条件】

  1. .where

  1. .count()

  1. .Any() 是否至少有一条数据满足条件

  1. Single() 有且只有一条满足要求

  1. SingleOrDefault() 最多只有一条满足要求

  1. First() 至少有一条,返回第一条

  1. FirstOrDefault() 返回第一条或者默认值

  1. 还有聚合函数:Max()、Min() Average() Sum() Count()

  1. GroupBy()

  1. 投影

思维导图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值