zoukankan      html  css  js  c++  java
  • c#之Linq的原理讲解及封装自己的Linq

    在博客园混了太久了,一直都是发一些软软的文章,做技术也要会点营销推广,工作艰辛,大家都懂的,是时候做出一点贡献了,写点有技术含量的文章,言归正传:

    前段时间写了一篇文章<<c#之lamda表达式的前世今生>>介绍了lamda的演变来历,由于最近工作忙,今天才抽出点时间来准备写这篇文章,希望能让所有喜欢所有喜欢c#的小伙伴起来一定的启发和帮助,咱们废话不多话,直接上代码。

    1、老规矩,定义Student类

    2、定义一个集合listStudent

    3、任务来了

    前提:假设我们还没有学会linq。

    领导说,写个方法能找出所有年龄大于20岁的学生集合,好,撸起袖子就写代码,如下:

    然后直接调用方法

    是不是很简单,完全没毛病。

    然后过了一会,需求增加了,领导说:写个方法找出所有在北大上学的学生,Ok,继续撸代码:

    然后直接调用方法

    对于需求简单的,上面的写法完全没毛病。

    但是过了一会,领导又提出诸多要求,分别如下:

    1、找出所有年纪大于20岁的清华学生

    2、找出所有年纪大于20岁的清华的男学生

    3、找出所有年纪大于18岁小于20的清华的女学生

    ....

    太多了,勤奋踏实的小伙伴们开始写新的方法了来满足领导要求,但是对于我来说,我就不干了,这样写什么时候是个头呀,我要另辟途径。

    4、懒人们开始学linq了

    领导需求太多了,懒人们一个一个写方法,肯定心里憋屈,然后就会去网上找解决方案,ok,找了linq。

    上面领导的需求直接通过Linq写:

    是不是瞬间感觉轻松了很多,以后有什么要求直接给来就行,一个Where扩展方法完全搞定,逻辑直接通过泛型委托来传递,委托中的方法体直接通过lamda(其实就是匿名函数的语法糖)来书写,代码量大大的减少。

    5、封装自己的MyLinq

    懒人学会了linq后,以后工作就快乐很多了,其中一部分喜欢折腾的就开始瞎折腾了:

    linq那么方便,那么微软到底怎么封装的呢?

    高手就是这样炼成的,重复造轮子是最好和最快的学习办法,ok,咱也封装一个自己的MyWhere。

    这里需要用到几个知识点:扩展方法、泛型、委托,不了解的朋友请百度搜索,这里我再写篇幅就长了,下面直接封装代码:

    扩展方法带两个参数,第一个参数为需要进行赛选的数据源,第二个参数为Func委托,带一个参数,返回bool值。

    foreach中通过Invoke方法调用委托来判断是否满足条件,满足条件则加入到我们的结果集合中。

    这样我们就可以使用自己封装的委托了。

    写到这里,大家应该能明白linq的原理了吧,希望对喜欢c#开发的小伙伴们起到一定的帮助和提高。

  • 相关阅读:
    php -- 魔术方法 之 对象输出 : __toString()
    php -- each()、list()
    php -- 魔术方法、魔术常量 简单介绍
    webbench
    md5sum/opensll md5
    shopt
    MD5
    print显示特定的数据格式
    gdb调试4--回退
    字符串化#、拼接字符##和可变参数宏(...和_ _VA_ARGS_ _)
  • 原文地址:https://www.cnblogs.com/huaguo/p/12055921.html
Copyright © 2011-2022 走看看