|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。比来,博客园的老赵在其博客上宣布了一篇博客文章,个中谈到了一种扩大LINQtoSQL以撑持批量删除数据的办法,可让我们便利天时用Lambda表达式来举行批量删除的操纵。
LINQtoSQL要依据前提批量删除数据,一般的做法都是编写SQL语句,并经由过程DataContext的ExecuteCommand办法来实行删除操纵。如许的办法很间接,可是不敷天然,如老赵所说:
我一直以为,在程序里呈现间接的SQL语句是一件很丑恶的事变。在我看来,数据库操纵应当被封装起来,而关于使用层的开辟职员来讲,眼中应当只要对象——退一步的话也可向数据库发送指令(就是利用存储历程)。 在此之前,老赵也写过相似扩大LINQtoSQL的文章,其使用了LINQtoSQL中Translate办法来修正静态天生的SQL语句。不外,此次关于批量删除的扩大,老赵利用C#3.0的新特征——扩大办法,来针对System.Data.Linq.Table完成了一个名为Delete的扩大办法,在援用了这个扩大包后,就能够经由过程以下相似的代码来举行批量删除数据的操纵:ItemDataContextdb=newItemDataContext();
db.Items.Delete(item=>item.CreateTime<DateTime.UtcNow.AddMonths(-1)); 扩大还撑持更庞大的删除前提ItemDataContextdb=newItemDataContext();
db.Items.Delete(item=>
item.CreateTime<DateTime.UtcNow.AddMonths(-1)||
item.ViewCount<item.CommentCount&&item.UserName!="jeffz"); 老赵的这类办法,是对Lambda的表达式树举行剖析后天生DELETESQL的Where前提子句。他利用了三个步骤来完成这个剖析事情:
- 利用PartialEvaluator将表达式中的常量间接盘算出来(比方“3*3”表达式将被交换为“9”),同时也会将一些存储在变量中的值利用常量举行交换。
- 利用ConditionBuilder将表达式中的常量搜集起来,并天生带参数的Condition表达式(比方“[CreateTime]<{0}AND[UserName]{1}”)。
- 利用DataContext.ExecuteCommand办法实行完全的SQL语句。
而别的一个博主,BlackJack,在老赵文章的提醒下,利用了一种“投机倒把”的体例来天生批量删除数据的SQL语句。他的思绪是,从Query中猎取主动天生的SELECTSQL语句,并将其改革为DELETESQL语句。改革的时分利用正则表达式来举行查找和交换。关于这类体例的具体做法,能够扫瞄LinqtoSql:批量删除之投机倒把版这篇文章。
关于这类扩大LINQtoSQL以撑持批量删除的做法,有些人以为仍是间接编写SQL更便利。但是,愈来愈多的人都在主动实验扩大LINQtoSQL,如许可让我们既取得LINQtoSQL带来的优点,又能完成一些更庞大的功效。
来自:http://www.infoq.com/cn/news/2008/04/linq-to-sql-ext-batch-deletion
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着! |
|