Linq多表查询条件批量删除
前阵写了Linq的单表生成相对Sql执行的批量删除,总觉得删除条件太局限了,并且又不能屏蔽linq的级联条件,这很容易误导一些人。所以想了应该还是要支持才好。呵呵。
其实思路和上次一样,就是生成Sql,用Linq自身条件组合sql应用,没有什么好说的。组合sql用 EXISTS关键字,组合一个子查询。
直接上Code:
- 代码
- /// EXISTS
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="source"></param>
- /// <param name="query"></param>
- /// <returns></returns>
- public static int Delete<T>(this System.Data.Linq.Table<T> source, Expression<Func<T, bool>> query)
- where T : class
- {
- if (source == null)
- throw new ArgumentException("source");
- if (query == null)
- throw new ArgumentException("query");
- //query = t => true;
- //为空DELETE FROM [dbo].[test] 全删除;个人觉得为空全删除,很不人道,所以还是抛异常
- System.Data.Linq.DataContext db = source.Context;
- DbCommand cmd= db.GetCommand(source.Where(query));
- string queryStr = cmd.CommandText;
- string sql = "DELETE FROM " + source.Context.Mapping.GetTable(typeof(T)).TableName + " WHERE EXISTS(" + queryStr+")";
- List<object> dbparams = new List<object>();
- foreach (SqlParameter item in cmd.Parameters)
- {
- SqlParameter p = new SqlParameter(item.ParameterName, item.SqlDbType, item.Size);
- p.Value = item.Value;
- dbparams.Add(item.Value);
- }
- cmd = null;
- return db.ExecuteCommand(sql, dbparams.ToArray());
- }
- 复制代码
调用方式就很简单了,一个Lamdam表达式,就搞定。比如
Console.Write( DataContext.test.Delete(t => t.id != null||t.name.Contains("qq")&&t.Orders.OrderDate<=DateTime.Now));
例子没有从重写Linq或者扩展Linq表达式出发,因为从这里出发我能力估计还差一筹,呵呵还是我觉得没有必要,这样的实现是否更简单,实现的功能更多些,为何不重用人家MS的东西呢,个人观点而已。
转载于:https://blog.51cto.com/whitewolfblog/834738
Linq多表查询条件批量删除相关推荐
- Elasticsearch 2.0以上版本根据条件批量删除Java如何实现
本文转载自:http://blog.csdn.net/u014039577/article/details/51802078,仅为了个人收藏,请支持原创作者. Elasticsearch在2.0以前版 ...
- stackexchange.mysql_StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- MyBatisPlus一对多分页查询处理主表子表查询条件
业务上遇到了一个问题,需要进行一对多的分页查询,同时还存在对主表和子表的条件限制,经过查询后参考其他人的经验进行了处理,记录如下. 其中的坑就是正常的分页查询下,一对多的分页是错误的,它不会按主表的查 ...
- SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名
一.普通查询 1. 若查询出的数据只有一条 a>可以通过实体类对象接收 <!-- Dish getDishByName(@Param("name") String na ...
- Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入
SELECT:查询 SELECT select-list FROM tb WHERE qualification 根据标准qualification查找对应的行 查询语句类型: qualifica ...
- Redis模糊查询及批量删除key
Redis模糊查询及标题批量删除key 一.登录redis,常用操作 登录本机redis服务器:redis-cli 输入密码验证:auth password 查看所有key:keys * 设置key: ...
- C# LINQ 多表查询
在C#中使用linq实现多表查询,首先需要在c#中连接你的数据库 首先我们先创建一个数据库和两个数据表 然后在表中插入数据设置完毕后到c#中 把数据库创建完毕后在main函数中连接字符串也就是连接自己 ...
- Delete By Query API 条件批量删除
转载:https://blog.csdn.net/wwd0501/article/details/78812873 之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会 ...
- 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
题目 编写一个 SQL 查询,来删除 Person表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个. Id Email 1 john@example.com 2 bob@example.c ...
最新文章
- ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解...
- 打开服务器数据库文件,如何打开服务器中的数据库文件
- SAP Revenue Cloud业务综述
- Vue中如何实现代码高亮功能?
- 使用Shell工具连接虚拟机
- 信号处理电路整理(RC、运放、TTL)
- windows7官方原版_如何下载微软原版操作系统、办公软件
- web和mysql连接并增删改查_Web界面实现数据库增删改查过程
- 非度量多维标度_用R语言做非度量多维尺度分析(NMDS)
- 计算机英语四六级考试时间,2019年12月英语四六级考试时间
- RMAN高级应用_pizi.pdf
- 2019年清华计算机系本校保研推免机考题目
- vue 引入萤石视频
- 爱奇艺动态化框架 Qigsaw 正式开源!
- python数据库分层设计_基于Python的高中教学数据库设计
- python画抛物线_python画抛物线
- 接着这次机会,发一下我做试管的经历~
- phpstorm+phpstudy调试thinkphp
- H、Magic necklace
- 超强下载神器,解决你的文档下载焦虑(下载百度文库)
热门文章
- 构建长期共赢生态圈,英特尔至强平台加速人工智能落地
- PyTorch 1.7发布:支持CUDA 11、Windows分布式训练
- 它来了!无人车穿梭在深圳的“宇宙最强街道”
- 今日可抢回程火车票,实测两款GitHub开源抢票插件,所有坑我们都帮你踩过了...
- 技术面试时该反问面试官什么问题?小伙整理了灵魂50问,GitHub日入2500星
- Mysql Proxy的安装配置详细教程
- asp.net mvc Post上传文件大小限制 (转载)
- 华为pat地址转换,以及内网web服务器发布
- sql instr()与LOCATE()字符串查找函数
- 综合使用union和limit区分结果并限制返回结果集的条数