视图模型-Lambda表达式
EF中通过改变实体对象达到操作数据库表数据的目的,在对数据库实体操作时,肯定少不了和Linq、Lambda打交道,熟悉SQL的话,上手 Linq并不难,from in where select...
关于Lambda表达式,其实本身就是从委托一步步演化后的简写,对于基础的查询而言,Linq语句和Lambda可以相互转换。这里不做详细的介绍。说明一下Lambda表达式中where和select 的区别
1.两者同时出现的时候,会从左到右解析
① select 在前,where在后:where的查询条件中必须包含select中选择的字段(select选择全列除外c=>c),否则编译失败
① where 在前,select在后:无限制,select可以选择任意字段
2.where 、select 返回值不同
①where本身就是筛选符合条件的数据,返回值为实体类型的集合
②selct(c=>c) 为选择实体的所有属性列,返回的是实体类型的集合
③select(c=>new{所有属性列} ),返回的是匿名类型,其包含实体所在的所有列(部分列一样)集合
④select(c=>c.字段=“”),返回的bool 类型的集合,加上FirstOrDefault(),返回bool类型
实际业务中,视图界面需要的数据会经常涉及到两个表甚至多个表,如何把多个表的部分字段关联作为一个返回类型供视图界面接收呢?这个时候视图模型就应运而生(可以采用继承解决),Linq、lambda语句将多表字段用Select New{}(匿名函数)查询出来,然后再将其一一对应赋值给视图模型的字段中
根据IDE的提示,就可以匿名类型已经转换为实体类型,故可以返回至视图界面供其解析后展示