写点什么

扩展 LINQ to SQL 以支持批量删除

  • 2008-04-01
  • 本文字数:1060 字

    阅读完需:约 3 分钟

最近,博客园的老赵在其博客上发表了一篇博客文章,其中谈到了一种扩展LINQ to SQL 以支持批量删除数据的方法,可以让我们方便地利用Lambda 表达式来进行批量删除的操作。

LINQ to SQL 要根据条件批量删除数据,通常的做法都是编写 SQL 语句,并通过 DataContext 的 ExecuteCommand 方法来执行删除操作。这样的方法很直接,但是不够自然,如老赵所说:

我始终认为,在程序里出现直接的 SQL 语句是一件很丑陋的事情。在我看来,数据库操作应该被封装起来,而对于应用层的开发人员来说,眼中应该只有对象——退一步的话也可向数据库发送指令(就是使用存储过程)。

在此之前,老赵也写过类似扩展 LINQ to SQL 的文章,其利用了 LINQ to SQL 中 Translate 方法来修改动态生成的 SQL 语句。不过,这次对于批量删除的扩展,老赵使用 C# 3.0 的新特性——扩展方法,来针对 System.Data.Linq.Table 实现了一个名为 Delete 的扩展方法,在引用了这个扩展包后,就可以通过如下类似的代码来进行批量删除数据的操作:

ItemDataContext db = new ItemDataContext();
db.Items.Delete(item => item.CreateTime < DateTime.UtcNow.AddMonths(-1));

扩展还支持更复杂的删除条件

ItemDataContext db = new ItemDataContext();
db.Items.Delete(item =>
item.CreateTime < DateTime.UtcNow.AddMonths(-1) ||
item.ViewCount < item.CommentCount && item.UserName != “jeffz”);

老赵的这种方法,是对 Lambda 的表达式树进行解析后生成 DELETE SQL 的 Where 条件子句。他使用了三个步骤来完成这个解析工作:

  • 使用 PartialEvaluator 将表达式中的常量直接计算出来(例如“3 * 3”表达式将被替换为“9”),同时也会将一些存储在变量中的值使用常量进行替换。
  • 使用 ConditionBuilder 将表达式中的常量收集起来,并生成带参数的 Condition 表达式(例如“[CreateTime] < {0} AND [UserName] <> {1}”)。
  • 使用 DataContext.ExecuteCommand 方法执行完整的 SQL 语句。

而另外一个博主, Black Jack ,在老赵文章的提示下,使用了一种“投机取巧”的方式来生成批量删除数据的 SQL 语句。他的思路是,从 Query 中获取自动生成的 SELECT SQL 语句,并将其改造为 DELETE SQL 语句。改造的时候使用正则表达式来进行查找和替换。关于这种方式的详细做法,可以浏览 Linq to Sql: 批量删除之投机取巧版这篇文章。

对于这种扩展 LINQ to SQL 以支持批量删除的做法,有些人认为还是直接编写 SQL 更方便。然而,越来越多的人都在积极尝试扩展 LINQ to SQL,这样可以让我们既获得 LINQ to SQL 带来的好处,又能实现一些更复杂的功能。

2008-04-01 12:093133
用户头像

发布了 254 篇内容, 共 69.7 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

TiDB 平凯数据库敏捷模式使用体验及总结:批量写入效率和压缩比高,安装部署简洁方便!

TiDB 社区干货传送门

信创数据库选型|平凯数据库敏捷模式对标 MySQL数据库试用体验

TiDB 社区干货传送门

平凯数据库敏捷模式

国产化替代-TiDB平凯数据库敏捷模式试用|智慧教育应用场景

TiDB 社区干货传送门

教育 国产化替代 平凯数据库敏捷模式

平凯数据库敏捷模式初体验:单机替换的新选择

TiDB 社区干货传送门

平凯数据库敏捷模式

平凯数据库敏捷模式实践评估:在线DDL、存储压缩和故障自愈方面的表现令人印象深刻

TiDB 社区干货传送门

平凯数据库敏捷模式

TiDB企业版敏捷模式体验与对比|制造业 MES、ERP 可参考

TiDB 社区干货传送门

平凯数据库敏捷模式

平凯数据库敏捷模式 3 节点尝鲜:降本明显,弹性与性能适配多行业需求

TiDB 社区干货传送门

平凯数据库敏捷模式

平凯数据库敏捷模式使用体验: 相较于MySQL性能提升在 30%以上,延迟降低约 30%

TiDB 社区干货传送门

平凯数据库敏捷模式

平凯数据库敏捷模式功能体验: 分布式数据库兼顾OLTP&OLAP

TiDB 社区干货传送门

平凯数据库敏捷模式

东芝硬盘率先完成 12 盘片堆叠技术验证

新消费日报

从MySQL迁移到 TiDB 平凯数据库敏捷模式的落地测试记录|用接近单机的成本,拿到了分布式的全套能力

TiDB 社区干货传送门

平凯数据库敏捷模式

从 TiDB v5.4 到 v6.5 的平滑过渡指南

TiDB 社区干货传送门

什么是境外社交媒体监测,社交媒体监测工具的具体用途有哪些?

沃观Wovision

社交媒体 舆情监测 海外舆情监控 沃观Wovision

智慧楼宇能源革命:MyEMS 如何助力商业综合体降本 30%

开源能源管理系统

开源 开源能源管理系统

职业学校平凯数据库(TiDB)敏捷模式试用报告

TiDB 社区干货传送门

教育 社区活动 性能测评 国产化替代 平凯数据库敏捷模式

从架构视角出发:构建你的 TiDB 实战能力体系

TiDB 社区干货传送门

OLAP OLTP HTAP 8.x 实践 MySQL 迁移

TiDB 企业版敏捷模式试用:政企实战场景体验

TiDB 社区干货传送门

社区活动 TEM 试用 平凯数据库敏捷模式

开发友好!30分钟搭建TiDB集群-平凯数据库敏捷模式实践

TiDB 社区干货传送门

金融 平凯数据库敏捷模式 证券 / 基金

聚焦深圳,预见智能未来:2026深圳人工智能终端展 全球邀请

AIOTE智博会

人工智能展览会 人工智能展会 人工智能博览会 人工智能展

平凯数据库敏捷模式体验分享

TiDB 社区干货传送门

平凯数据库敏捷模式

敏捷模式数据库及TEM试用及未来展望

TiDB 社区干货传送门

平凯数据库敏捷模式

AI 语音识别技术在各行业应用

北京木奇移动技术有限公司

AI技术开发 软件外包公司 AI语音

金融行业工作者使用 TiDB 敏捷模式的超预期体验:成本优势、开发效率、运维便捷

TiDB 社区干货传送门

平凯数据库敏捷模式

安装便捷,才是好用的开始|平凯数据库敏捷模式体验分享

TiDB 社区干货传送门

平凯数据库敏捷模式

MySQL数据库 VS TiDB 精华入门版-平凯数据库敏捷模式试用体验

TiDB 社区干货传送门

平凯数据库敏捷模式

TIDB 平凯数据库敏捷模式,国产化替代的首选|医疗行业

TiDB 社区干货传送门

医疗 数据库迁移 平凯数据库敏捷模式

TiDB 平凯数据库敏捷模式试用体验:方便扩展,更节省存储空间|水务行业可参考

TiDB 社区干货传送门

平凯数据库敏捷模式

TiDB 分布式数据库学习路线图,一场投资未来的旅程,零基础也能冲!

TiDB 社区干货传送门

技术趋势 数据库原理 8.x 实践 部署与初始化 MySQL 迁移

不卷又想稳稳扛住,TiDB 平凯数据库试用体验|DTC电商公司场景,两周双 11 彩排压测

TiDB 社区干货传送门

平凯数据库敏捷模式

大模型 | VLM 初识及在自动驾驶场景中的应用

地平线开发者

自动驾驶 算法工具链 地平线征程6

轻松驾驭分布式数据库:平凯数据库 TiDB 敏捷模式初体验

TiDB 社区干货传送门

平凯数据库敏捷模式

扩展LINQ to SQL以支持批量删除_.NET_朱永光_InfoQ精选文章