项目总结:EF操作与Linq写法记录

1、EF引入

  新建一个MVC项目之后,要引用EF框架,可以按照以下步骤进行:

  1),在Models中添加项目

  2),选择Entity Data Model,并重新填写名字

  3),选择代码优先之后,选择连接的数据库以及表,之后便生成,此时模型里面的实体就相当于数据库中的表了

2、Linq与一些lambda写法

  1)、单表查询:

  1. using (var db = new DBModel())
  2. {
  3. DepartmentList = (from n in db.output_Auth where n.badge == badge select n.department).Distinct().ToList<string>();
  4. }
  5. //from n(表别名) in table(表格) where n.id == id(条件) select n(查找该表所有),然后后面可以选择筛选的条件,比如.Distinct()\FirstOrDefault()\Sum()等
    //select 中想要查询具体的某个字段,写法为:select new {n.id, n.name, n.age}等,字段想赋予别名,写法为:select new {anotherID = n.id, anotherName = n.name}
  6.  
  7. 注:几个本项目中常用的方法:
    1OrderByDescending(n => n.id); //降序排列
    2FirstOrDefault(); //获取查询结果的第一行
    3ToList(); //将查询结果列表化
    4Distinct(); //将查询结果单一化,类似于SQL中的 distinct
    5Sum(n => n.id); //结果总和
  8.  
  9. 剩下的在此次项目中未用到,将来使用到再总结。

  2)、多表查询:

  1. var time1 = (from a in Table_A join b in Table_B on a.id equals b.id where a.id == id & b.time == timeselect new { a.time, a.data}).ToList();
  1. //在这里和SQL的多表查询语句写法不太同,on后面的条件写法为: a.x equals b.x
  2.  
  3. //补充1:无法直接在 Linq to SQL 的语句中将时间格式化,只能先查询出来了,再在 Linq to Entity 中格式化时间
      即上面查询语句 where b.time == time 中,b.time 不能写成 b.time.ToString("yyyy-MM-dd") 之类的
      只能将查到的时间放在 time1 中,再对时间进行格式化,如下:
      var time2 = (from t in time1 where t.time.GetDataTimeFormats()[5].ToString() == nowDate select new{Data = t.data}).Sum(t => t.Data);
      GetDateTimeFormats()[5]时间格式:yyyy-MM-dd
  4.  
  5. //补充2:LinQ to SQL 中查询的结果如果为0,则无法直接使用.Sum()求和,应该先将查询的结果.ToList(),再进行第二步,在 LinQ to Entity 中进行求和。类似于上面的写法,需要写两条语句。

  3)、插入与更新语句

  1. using (var db = new DBModel())
  2. {
       //插入之前先查找有没有该数据
  3. var data = (from tb in db.Table where tb.id == id select tb).FirstOrDefault();
  4.    //如果没有该数据,则执行插入语句
  5. if (data == null)
  6. {
  7. var table = new Table();
  8. table.name = name;
        table.age = age;
  9. //执行插入操作
  10. db.Table.Add(table);
        db.SaveChanges();
       }
  1.    //如果当月有数据
  2. else
  3. {
  4. //Linq无法直接更新主键的数据,只能是先将此条信息复制出来,把原来的那条数据删除,再重新插入一条修改后的数据,若不是主键数据,则直接更新
  5. var tableNew = new Table();
  6.  
  7. tableNew.name = name;
  8. tableNew.age = age;
  9.  
  10. db.Table.Remove(data); //移除老数据
  11. db.Table.Add(tableNew); //添加新数据
  12. //执行更新操作
  13. db.SaveChanges();
  14. }
  15. }
  16.  
  17. //Lambda 表达式新增写法 :

  var data = db.Table.FirstOrDefault(tb => tb.id == id & tb.name == name);
  if (data == null)
  {
    var table = new Table();

    table.name = name;

    table.age = age;

    db.Table.Add(table);
    db.SaveChanges();
  }

  1. //Lambda 修改:

  var table = db.Table.FirstOrDefault(tb => tb.id == id);
  table.name = name;
  table.age = age;
  db.SaveChanges();

  4)、删除

  1. //Lambda表达式写法:
  2. using (var db = new DBModel())
  3. {
  4. var user = db.Table.FirstOrDefault(opAu => opAu.ID == userID);
  5. db.Table.Remove(user);
  6. db.SaveChanges();
  7. }
  8.  
  9. //Linq写法:
  10. using (var db = new DBModel())
  11. {
  12. var user = (from tb in db.Table select tb).FirstOrDefault();
  13. db.Table.Remove(tb);
  14. db.SaveChanges();
  15. }

EF操作与Linq写法记录的更多相关文章

  1. EF操作数据库的步骤和一些简单操作语句

    这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...

  2. EF操作MySql

    EF的CodeFrist操作MySql的提前准备: 1.安装两个包:MySql.Data和MySql.Data.Entity,在VS中程序包管理器中添加2个包.(备注需要的VS2015,并且EF6支持 ...

  3. ASP.net如何保证EF操作类线程内唯一

    说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...

  4. 开源word操作组件DocX的记录

    开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...

  5. EF操作扩展之async

    EF的操作类网上很多类,我只是把我在平时项目中的类进行一些改进和扩展,扩展了部分同步和异步的EF操作 接口 /// <summary> /// 接口数据操作基础类 /// </sum ...

  6. EF 更新部分字段写法

    EF 更新部分字段写法 1.EF默认是查询出来,修改后保存: 2.设置不修改字段的IsModified为false,此方法不需要先从数据库查询出实体来(最优方法): db.Set<T>() ...

  7. 操作MySQL数据进行记录的随意排序

    说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢? 其实这里我所说的“随意排序”,本质 ...

  8. C# EF 生成1-20随机数,生成10个,不能重复 LINQ写法

    , ).Select(x => ).ToList(); foreach (var i in num) { Console.WriteLine(i); } 上面的函数碉堡天了

  9. 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)

    话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法  (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...

随机推荐

  1. 5-网宿CDN客户端推流NGB

    网宿NGB调度系统(类似httpdns原理)从服务端分发给客户端推流IP,实现基于APP realip精准调度模式. 参考官网介绍:https://www.wangsu.com/content/det ...

  2. Python【day 15-3】函数部分

    '''''' ''' 一.函数 1.函数定义 对功能或者动作的封装 在类中定义,就是方法 在类之外定义,就是函数 2.函数写法 1.定义或者申明函数 def 函数名(形参列表): 函数体(return ...

  3. fwrite(): send of 8192 bytes failed with errno=104 Connection reset by peer

    问题:fwrite(): send of 8192 bytes failed with errno=104 Connection reset by peer 问题描述 通过mysql + sphinx ...

  4. 交互式shell脚本web console

    官网:http://web-console.org/ 这个脚本可以实现web下交互,也就是有了这玩意后可以不用反弹shell了. <?php // Web Console v0.9.7 (201 ...

  5. 从server.xml看Tomcat容器的层次结构

    先来看一下server.xml的结构: <Server> ​ <Listener/> ​ <GlobalNamingResources> ​ <Resourc ...

  6. 比hive快10倍的大数据查询利器presto部署

    目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...

  7. 通过GL函数处理图片以及其它相关功能

    我们知道在屏幕后处理里面通过 Graphics.Blit 函数可以通过材质处理屏幕图片, 当我们想要处理一般图片的时候, 直接调用GL函数就行了, 按照习惯自己封装一个 Blit 方法 : ) { i ...

  8. 【cf915】E. Physical Education Lessons(线段树)

    传送门 简单的线段树区间修改区间查询,但是因为数据范围过大,所以采用动态开点的方法(注意一下空间问题). 也可以直接对询问区间的端点离散化然后建树,这种方法时间复杂度和空间复杂度都比较优秀. 给出动态 ...

  9. 平方,立方,n次方,上标/下标

    选种你需要的上标,如2,右键设置单元格格式:选择上标,确定即可: 最终效果:

  10. day80_10_29git冲突解决与短信服务redis

    一.开发中的操作. 在项目开发中,在工作区进行开发,开发结束后提交到本地版本库. 再拉取远程仓库,具体如下: """ 1.开发前,拉一次远程仓库 2.工作区进行开发 3. ...