EF操作与Linq写法记录
项目总结:EF操作与Linq写法记录
1、EF引入
新建一个MVC项目之后,要引用EF框架,可以按照以下步骤进行:
1),在Models中添加项目
2),选择Entity Data Model,并重新填写名字
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();
}
EF操作与Linq写法记录的更多相关文章
- EF操作数据库的步骤和一些简单操作语句
这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...
- EF操作MySql
EF的CodeFrist操作MySql的提前准备: 1.安装两个包:MySql.Data和MySql.Data.Entity,在VS中程序包管理器中添加2个包.(备注需要的VS2015,并且EF6支持 ...
- ASP.net如何保证EF操作类线程内唯一
说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...
- 开源word操作组件DocX的记录
开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...
- EF操作扩展之async
EF的操作类网上很多类,我只是把我在平时项目中的类进行一些改进和扩展,扩展了部分同步和异步的EF操作 接口 /// <summary> /// 接口数据操作基础类 /// </sum ...
- EF 更新部分字段写法
EF 更新部分字段写法 1.EF默认是查询出来,修改后保存: 2.设置不修改字段的IsModified为false,此方法不需要先从数据库查询出实体来(最优方法): db.Set<T>() ...
- 操作MySQL数据进行记录的随意排序
说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢? 其实这里我所说的“随意排序”,本质 ...
- C# EF 生成1-20随机数,生成10个,不能重复 LINQ写法
, ).Select(x => ).ToList(); foreach (var i in num) { Console.WriteLine(i); } 上面的函数碉堡天了
- 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)
话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法 (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...
随机推荐
- Java日期时间API系列1-----Jdk7及以前的日期时间类
先看一个简单的图: 主要的类有: Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为 ...
- 1.java容器基本内容
目录 java容器概述 1.collection接口 (1)collection接口方法 (2)set接口实现类 (3)list接口实现类 (4)queue接口实现类 2.map接口 java容器概述 ...
- 异常处理类-Throwable源码详解
package java.lang; import java.io.*; /** * * Throwable是所有Error和Exceptiong的父类 * 注意它有四个构造函数: * Throwab ...
- 深入浅出js实现继承的7种方式
给大家介绍7中js继承的方法 有些人认为JavaScript并不是真正的面向对象语言,在经典的面向对象语言中,您可能倾向于定义类对象,然后您可以简单地定义哪些类继承哪些类(参考C++ inherita ...
- C++ message queue 消息队列入门
说明:当我们有多个线程以不同的速度运行并且我们想要以特定的顺序从一个线程向另一个线程发送信息时,消息队列可能会有用. 这个想法是,发送线程将消息推送到队列中,而接收线程将消息按自己的步调弹出. 只要发 ...
- arcgis api 4.x for js 结合 react 入门开发系列react全家桶实现加载天地图(附源码下载)
基于两篇react+arcgis的文章介绍,相信大家也能体会两者的开发区别了.在“初探篇”中作者也讲述了自己的选择,故废话不多说,本篇带大家体验在@arcgis/webpack-plugin环境下,使 ...
- 重新认识快速视图窗体(Quick View Form)
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复158或者20151009可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 在我的 微软Dynamics C ...
- 【原创】CentOS 7 安装解压版mysql5.7
1.将mysql压缩包解压至 /usr/local 文件夹下,将其改名为mysql #解压 tar -zxf mysql-5.7.27-el7-x86_64.tar.gz -C /usr/local/ ...
- BayaiM__linux双网卡绑定文档
BayaiM__linux双网卡绑定文档 开门贱山:以下内容纯属原创,如有雷同,爱咋咋滴吧~~!!—————————————————————————————————————————— 1,备份网卡信息 ...
- vs code切换中英文界面
1. 在vs code的应用扩展中搜索这个插件: Chinese (Simplified) Language Pack for Visual Studio Code 这个插件,安装完毕重新加载即可生效 ...