zoukankan      html  css  js  c++  java
  • LINQ(初尝)

    好久没写博咯,因为学校的项目asp.net开发一个SCM,这学期才开始学做网站,需要大量时间打基础,再次感到,台上一分钟台下十年功。

    言归正传,.NET4.0出来有些日子了,自己LINQ却还未接触,之前都认为不过是语法糖啦,学不学无所为啦,上次看了aders hejlsberg 在.NET4.0发布会上的视频,more about what,less about how.让我印象深刻啊,what正是LINQ要表达了,感谢aders,所以今天决定初尝LINQ,顺便说一句,虽然学校项目还是用.net 2.0,但是怎能因此止步?拒绝新思维?

    LINQ(Language Integrated Query)

    c#2008为了支持LINQ增加了许多语言特性,诸如:扩展方法、LAMBDA表达式、表达式树、匿名类型、和对象初始值设定项等语言扩展,都是为了支持LINQ

    特性小结:

    当要扩展方法要应用于 var jz=new{Name}匿名类型时,就需要.net4.0的dynamic了

    lambda表达式左边是输入右边是输出

    表达式目录树(Expression类):代码是数据,意味着可以运行时修改或编辑

    小试一下:

                var processes = Process.GetProcesses()
                    .Where(p => p.Threads.Count > 5)
                    .OrderBy(p=>p.ProcessName )
                    .Select(p => new { p.Id, Name = p.ProcessName });
    

    代码等价于调用扩展方法的样子:

           var processes = Enumerable.Select(
                    Enumerable.OrderBy(
                          Enumerable.Where(Process.GetProcesses(), (p => p.Threads.Count > 5)),
                          (p => p.ProcessName)),
                    (p => new { p.Id, Name = p.ProcessName }));
    更佳代码:
             var processes = from p in Process.GetProcesses()
                                where p.Threads.Count > 5
                                orderby p.ProcessName
                                select new { p.Id, Name = p.ProcessName };
    虽然功能等价,但是可读性就差多咯.
     
    今天先到这儿,待续。
  • 相关阅读:
    岛田庄司《占星术杀人魔法》读后感
    OutputCache祥解
    ZOJ Monthly, June 2014 月赛BCDEFGH题题解
    接口和抽象类有什么差别
    C语言指针的初始化和赋值
    深入探讨this指针
    郁 繁体为“鬰” 古同 “鬱”
    socketpair的使用
    Android的FrameLayout使用要注意的问题
    下确界和上确界
  • 原文地址:https://www.cnblogs.com/jiangzhen/p/1714732.html
Copyright © 2011-2022 走看看