ItemDataContext db = new ItemDataContext();
db.ExecuteCommand(
"DELETE FROM Item WHERE [CreateTime] < {0}",
DateTime.UtcNow.AddMonths(-1));
我始终认为,在程序里出现直接的SQL语句是一件很丑陋的事情。在我看来,数据库操作应该被封装起来,而对于应用层的开发人员来说,眼中应该只有对象——退一步的话也可向数据库发送指令(就是使用存储过程)。当然,这是理想状态,值得追求,但不可强求。幸运的是C# 3.0所拥有的强大特性足以让我们对LINQ to SQL的功能进行扩展。为了更好地进行项目开发,以及周五的一次技术交流,我为LINQ to SQL扩展了批量删除功能。当项目中引用了这个扩展之后,我们就可以使用如下的代码来实现上面的功能了:
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");
之前我对于LINQ to SQL的扩展大都基于DataContext,不过很明显,这次的扩展是基于Table
这个扩展的关键在于根据表达式树生成Where Condition,我使用三个步骤完成这个扩展,大家可以关注代码里的相关实现(如果需要的话我也可以在以后进行说明):
有了批量删除的功能,那么还缺点什么呢?那自然就是批量更新的功能了。批量更新的功能比删除略为复杂一些,我正在开发之中。在有了这个扩展之后,我们就可以使用如下的方法进行批量更新了:
ItemDataContext db = new ItemDataContext();
db.Items.Update(
item => new Item
{
Introduction = item.Title + "Hello World",
ViewCount = item.ViewCount + 1,
}, // 更新方式
item => item.CommentCount > 100 /* 更新条件 */);
您可以点击这里下载我对批量删除的扩展。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/552044/viewspace-434516/ ,如需转载,请注明出处,否则将追究法律责任。