zoukankan      html  css  js  c++  java
  • 记录Linq所学.

    因为一时之间对Linq比较感兴趣.在博客园查找相关资料如下.     走进Linq(http://kb.cnblogs.com/list/42569/)作者:横刀天笑

    在上根据作者的步骤学习后一些入门,整理一下.(感觉Linq就是一些C#语言的新特性集合的产物).
    首先提供一个功能用于把一个类的属性的值全部输出.因为通用性.用上反射取值.

    Code

     先定义自然界中的书.如下

    Code

    有下例要求.有很多的书.要求你根据相关条件查找出满足条件的书.
    我们分析如下.很多的书---IList<Book>.相关条件---public delegate bool DelegateWhere(Book book);
    满足条件的书---IList<Book>.
    查找过程如下.

    Code

    以上只是实现.那么人要查找.那么如何来做这一动作了.
    首先是上面查找的相关条件的确定.那么有人问.那么还不是要定义一个条件(就是委托).然后人查找是加上条件.能不能直接一
    步到位(比喻人可以先知道条件然后查找,也可以查找时才知道条件吗,是不是).C# 2.0为我们提供了匿名方法,能让我们查找时
    输入条件.如下var filter = books.Where(delegate(Book book) { return book.Title == "Linq"; });
    大家可能有点不清楚.这个books就是IList<Book>,而Where就是他的扩展方法.大家可以看到这个查找方式不是很漂亮,因此
    C# 3.0给我们提供了Lambda表达式,请看如下简化如下var filter1 = books.Where(book => book.Title == "Linq");
    可以看到漂亮很多.简要说明一下
                //也可以多个输入参数,逗号分隔,别忘记小括号
                //(x,y) => x+y等价与
                //delegate(int x,int y){return x+y;}
    而select,等都可以通过如上方式实现.大家可能注意到.以上方法没有通过性.而Linq是对实现IEnumerable接口的可能通用的.
    如下按上面的前二步我们重复一下.就可以实现对IEnumerable接口通用.

    Code

    上面的委托其实MS已经给我们实现,

    Code

    还有大家在上面可能看到yield return关键字.这是C# 2.0里出现的一个关键字,返回一个迭代器.
    通过如上.我们可以写如下语句.

    Code

    在我机器上测试如果如下.(Reflector.write请看最上面的那个类).

    实践和理论完全相符.大家看下面的是不是有点Linq的影子了.
    最后我们把如下Linq语句解析如下.

    Code

    在Linq里的关键字如in,from,where大家可以想象成C++里的define,实际是一些函数和变量定义.(不知理解是否有误.有的请指出.在此谢谢)
    写在最后.大家可以看到如上有许多的大家不平常用的C#语言新性质.组合在一起的功能如此强大.呵呵.
    本人水平有限.有什么错误谢谢大家的指出.

  • 相关阅读:
    JS实战 · 表单验证
    JS实战 · 仿css样式选择器
    JS实战 ·  收缩菜单表单布局
    cookie自动登录的实现
    redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动
    yum问题解决
    配置yum镜像源
    shell笔记
    CCIE总结:路由器、交换机
    云主机如何挂在磁盘
  • 原文地址:https://www.cnblogs.com/zhouxin/p/1562970.html
Copyright © 2011-2022 走看看