《ASP.NET MVC企业实战》(三)MVC开发前奏

来源:互联网 发布:布偶猫哪里买 知乎 编辑:程序博客网 时间:2024/06/07 23:06

在上一篇“《ASP.NET MVC企业级实战》(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性。本篇继续以这样的方式来学习C#中的一些特性。


一、C#3.0/3.5新特性(续)

a)Lambda表达式

Lambda表达式的本质就是匿名函数,基于数学中的λ演算而得名,直接对应其中的labmda抽象,是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式树类型。Lambda表达式的运算符为=>,读作goes to,具有与“=”相同的优先级。

Lambda表达式的基本形式为(inputparam)=> expression,例如(x,y)=>x==y;在只有一个参数时可以省略括号。lambda表达式的演化如下:



在原始写法中可以使用var类型推断,但后面的写法必须指定签名类型了。

b)标准查询运算符(SQO)

标准查询运算符时定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,这些方法用来对集合进行筛选、投影、聚合、排序等操作。

Where筛选集合,需要为where提供提供一个带bool返回值的筛选器,如图,匿名方法、委托、lambda表达式都可作为筛选器。

 

Select查询投射,返回的是IEnumerable<TResult>类型的集合。

Count数量统计。

OrderBy排序,还有OrderByDescending,ThenBy等,OrderBy后还可以继续OrderBy,ThenBy不是必须的。

延迟加载与即时加载,Where方法就是延迟加载的(Select也是),在通过ORM框架操作数据库时,使用Where方法只是在后续生成的SQL语句中增加了相应的条件,返回的是DbQuery对象,在这个对象上可以继续添加别的查询条件,最后在使用查询结果时(ToList、ToArray等)一次性查询数据库。

如果使用FindAll代替Where,会即时加载。延迟加载实际上是将SQL的生成与执行分开进行,这样可以减少与数据库的交互,有助于提高性能。

 

c)LINQ

linq查询表达式是与SQL风格接近的代码,linq编译时会转换成标准查询运算符。以from开始,以select或group by子句结尾,输出的是一个IEnumerable<T>或IQueryable<T>集合。简单使用一下,要达到了解的程度还远远不够:



 

二、 C#4.0新特性

a)可选参数和命名参数

可选参数接触较多,可以为某个参数指定默认的值,这样这个调用方法时这个参数就不是必须的了。

而通过命名参数的传参方式,实参顺序可以与形参的不同。

 

b)Dynamic特性


这与ViewBag类似,都是动态类型。

 

三、作者在最后还提了一下C#5.0的async、await特性,针对多线程和异步的,这些暂时不做了解了。

 

学习资料:ASP.NET MVC 企业级实战 by 邹琼俊

 

欢迎关注公众号【菜鸟程序员成长记】