今天不忙,没什么事情,继续写写随笔。

之前的文章写到了EF,很多人留言EF的操作用什么?  今天,就继续给大家分享EF的操作, Linq .

先从Linq操作Object内置对象开始

从Linq的基础应用开始。

自从C#3.5 以后,出现了一个新的特性, 一个名为 var 的关键字, 允许程序无须显示的定义一个局部变量,在使用var声明变量时,编译器会通过该变量初始化代码来推断实际类型,比如

var first = 1 ; 此时是int 类型

var secend ="1"; 此时是string类型

下面我们继续看,Linq的自动属性。

继推断以后,Linq实现了很多人性化的辅助方法,比如

User 为已经创建好的构造函数

List<User> userList =new List<User>();

userList.Add(new User(1,"张小萌","女"));

userList.Add(new User(2,"张小猛","男"));

userList.Add(new User(userID=3,userName="张小猛",userSex="男")); //写法不同

下面介绍Lambda 拉姆达 表达式,也是属于Linq的一种常用函数表达式

Lambda的出现,代替了匿名函数的应用,而且Lamabad表达式更为的简便,下面举例子说明。

string[] strLists = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明一个数组

string[]strList =Array.FindAll(strLists,s=>(s.IndexOf("a")>=0)); //声明一个数组对象,找到 “a” 出现次数大于1的

我们可以看到Lambad的一个语法规则, (输入参数 =>(规则,表示操作符)  操作表达式  )

再看Linq的遍历输出

同样,声明一个数组

string[] strLists = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明一个数组

foreach(string item in strLists)

{//方法体...}

如果操作一次遍历操作多个数组,如何操作?

string[] strLists1 = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明第一个数组

string[] strLists2= new string[]{"11111","22222","333333"}; //声明第二个数组

foreach(string item in strLists1.Concat<string>(strLists2))

{//方法体...}

下面继续介绍Linq.join 类似于多表查询,不同的是,Linq.join 是操作Object对象的

假设strLists1  strLists2 这两个数据集的外键为 ID ,s1 属性为姓名 s2属性为性别

var query =strLists1.Join(strLists2

s1=>s1.ID, s2=>s2.ID,

(s1,s2)=>new{

姓名=s1.name,

性别=s2.sex

});

该方法等同于

var query = from s1 in strList1 join p in strList2 on s1.ID equals s2.ID

select new {

姓名=s1.name,

性别=s2.sex

};

这样,一个简单实用的linq多表连接查询出来了

在取单集合的时候,我们也可以这么写, from p in str1 select {...} 也可以用Lambada写法,

string str = strList1.Where(itm=>itm.ProductName=="aaaaa")

这里注释一下: Linq对数据操作的时候, 如果是List<t>类型, 使用Linq会自动转换为 IEnumerable类型,如果想再转回来, 后面加一句  .ToList() 即可

在使用上,很多和数据库操作类似,不过是语法有了一点点改变而已。

包括了聚合、Sum操作、Max操作、Min操作、Average操作、Aggregate操作、集合操作等等......

接下来,分享一下EF和Linq之间不得不说的小秘密

EF所提供的关系对象模型,提供了一个可视化的设计页面,还生成了一个强类型DataContext上下文类,将存储过程和函数映射到DataContext,返回数据和填充实体类。

其他的和上面所述操作性上,并无很大差别, 知识每次引用数据操作,必须使用声明的实体类操作对象,比如

private DataEntityContext db =new DataEntityContext ();

db.change(); 这个就包含了增删改。

今天就写这么多了,后面的应用,留到下次再说。 谢谢各位的收看。

.net MVC成长记录(四)Linq(1)的更多相关文章

  1. .net MVC成长记录(一)

    今天第一次写博客,之前从学校出来,学了ASP.NET, 现在第一份工作接触的是MVC,在此便记录和分享一下学习MVC的过程,希望能和大家多一些交流.言归正传,首先给大家介绍一下MVC的基础知识. MV ...

  2. .net MVC成长记录(二)

    今天上班的任务完成了,接下来写一下博客,巩固一下,再学习一些新知识. 闲话不多说,我们言归正传.昨天讲到了如何mvc框架在微软下,已经变成了一个非常灵活非常‘干净’的开发框架了, 同时也讲述了如何创建 ...

  3. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  4. MVC学习(四)几种分页的实现(3)

    在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...

  5. 蓝色的成长记录——追逐DBA(8):为了夺回SP报告,回顾oracle的STATSPACK实验

    ***********************************************声明*************************************************** ...

  6. 2017.3.31 spring mvc教程(四)全局的异常处理

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  7. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

  8. ASP.NET MVC Model绑定(四)

    ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...

  9. ASP.NET MVC Model元数据(四)

    ASP.NET MVC Model元数据(四) 前言 前面的篇幅讲解了Model元数据生成的过程,并没有对Model元数据生成过程的内部和Model元数据结构的详细解释.看完本篇后将会对Model元数 ...

随机推荐

  1. 48.cartinality的基本用法

    主要知识点 cartinality的用法     es去重用的是cartinality metric算法,对每个bucket中的指定的field进行去重,然后获取去重后的count,类似于count( ...

  2. js中阻止事件冒泡和浏览器默认行为

    在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题.[兼容IE和FF] ...

  3. noip模拟赛 希望

    分析:题目中说用栈实现,我觉得这样很麻烦,就用了一个数组+指针解决了.其实就是大模拟. #include <stack> #include <string> #include ...

  4. hdu 4888 最大流给出行列和求矩阵

    第一步,考虑如何求是否有解.使用网络流求解,每一行和每一列分别对应一个点,加上源点和汇点一共有N+M+2个点.有三类边: 1. 源点 -> 每一行对应的点,流量限制为该行的和 2. 每一行对应的 ...

  5. 修改tomcat端口号的方法

    8080是Tomcat服务器的默认的端口号.我们可以通过修改Tomcat服务器的conf目录下的主配置文件server.xml来更改.用记事本打开server.xml文件,找到如下部分: 以下为引用的 ...

  6. 浅析gcc、arm-linux-gcc和arm-elf-gcc关系

    浅析gcc.arm-linux-gcc和arm-elf-gcc关系 一.GCC简介 The GNU Compiler Collection,通常简称 GCC,是一套由 GNU 开发的编译器集,为什么是 ...

  7. nyoj_289_苹果_20140307

    苹果 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. ...

  8. linux 内核 2.5-4.7 版本change

    https://kernelnewbies.org/LinuxVersions?action=show&redirect=Linux26Changes https://kernelnewbie ...

  9. 软件测试之怎么避免Bug漏测?

    一.对需求评审阶段,对业务需求细节理解不明确,未深入挖掘隐含拓展需求 改进措施 需求评审前,我们应该先仔细阅读prd及交互文档,先形成自己对产品的思考,通过脑图的方式列出对产品设计的疑问点,从用户或者 ...

  10. request.getInputStream() 的两种解析方式

    http://sagewsg.iteye.com/blog/1717923 byte[] bytes = new byte[1024 * 1024]; InputStream is; try { is ...