好久没写博咯,因为学校的项目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 };
虽然功能等价,但是可读性就差多咯.
今天先到这儿,待续。