欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

EF操作与Linq写法记录

程序员文章站 2022-07-11 07:59:13
项目总结:EF操作与Linq写法记录 1、EF引入 新建一个MVC项目之后,要引用EF框架,可以按照以下步骤进行: 1),在Models中添加项目 2),选择Entity Data Model,并重新填写名字 3),选择代码优先之后,选择连接的数据库以及表,之后便生成,此时模型里面的实体就相当于数据 ......

项目总结:ef操作与linq写法记录

1、ef引入

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

  1),在models中添加项目EF操作与Linq写法记录

  2),选择entity data model,并重新填写名字EF操作与Linq写法记录

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

 

2、linq与一些lambda写法

  1)、单表查询:

using (var db = new dbmodel())
{
    departmentlist = (from n in db.output_auth where n.badge == badge select n.department).distinct().tolist<string>();
}
//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}

注:几个本项目中常用的方法:
1、orderbydescending(n => n.id); //降序排列
2、firstordefault(); //获取查询结果的第一行
3、tolist(); //将查询结果列表化
4、distinct(); //将查询结果单一化,类似于sql中的 distinct
5、sum(n => n.id); //结果总和

剩下的在此次项目中未用到,将来使用到再总结。

 

  2)、多表查询:

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();
//在这里和sql的多表查询语句写法不太同,on后面的条件写法为: a.x equals b.x

//补充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

//补充2:linq to sql 中查询的结果如果为0,则无法直接使用.sum()求和,应该先将查询的结果.tolist(),再进行第二步,在 linq to entity 中进行求和。类似于上面的写法,需要写两条语句。

 

  3)、插入与更新语句

using (var db = new dbmodel())
{
   //插入之前先查找有没有该数据 var data = (from tb in db.table where tb.id == id select tb).firstordefault();
   //如果没有该数据,则执行插入语句 if (data == null) { var table = new table();
table.name = name;
    table.age = age;
//执行插入操作 db.table.add(table);
    db.savechanges();
   }
   //如果当月有数据
    else
    {
        //linq无法直接更新主键的数据,只能是先将此条信息复制出来,把原来的那条数据删除,再重新插入一条修改后的数据,若不是主键数据,则直接更新
        var tablenew = new table();

        tablenew.name = name;
        tablenew.age = age;

        db.table.remove(data); //移除老数据
        db.table.add(tablenew); //添加新数据
        //执行更新操作
        db.savechanges();
    }
}      

//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();
  }

 //lambda 修改:

  var table = db.table.firstordefault(tb => tb.id == id);
  table.name = name;
  table.age = age;
  db.savechanges();

 

  4)、删除

//lambda表达式写法:
using (var db = new dbmodel())
{
    var user = db.table.firstordefault(opau => opau.id == userid);
    db.table.remove(user);
    db.savechanges();
}

//linq写法:
using (var db = new dbmodel())
{
    var user = (from tb in db.table select tb).firstordefault();
    db.table.remove(tb);
    db.savechanges();
}

 

上一篇: 小学文化

下一篇: php 高性能书写