首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linq to Sql:如何快速清除表

Linq to Sql:如何快速清除表
EN

Stack Overflow用户
提问于 2009-10-04 17:45:08
回答 4查看 89.6K关注 0票数 92

要删除表中的所有行,我目前正在执行以下操作:

代码语言:javascript
复制
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();

然而,这似乎需要很长时间。有没有更快的方法?

EN

回答 4

Stack Overflow用户

发布于 2011-10-27 14:17:46

不幸的是,LINQ-to-SQL不能很好地执行基于集合的查询。

你可能会认为

代码语言:javascript
复制
context.Entities.DeleteAllOnSubmit(context.Entities); 
context.SubmitChanges(); 

将转化为类似这样的内容

代码语言:javascript
复制
DELETE FROM [Entities]

但不幸的是它更像是

代码语言:javascript
复制
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...

当您尝试在LINQ- to -SQL中执行批量更新时,您将发现相同的情况。如果一次超过几百行,它就会变得太慢。

如果您需要执行批处理操作&您正在使用LINQ- to -SQL,则需要编写存储过程。

票数 21
EN

Stack Overflow用户

发布于 2013-01-29 04:29:10

我喜欢使用扩展方法,如下所示:

代码语言:javascript
复制
public static class LinqExtension
{
  public static void Truncate<TEntity>(this Table<TEntity> table) where TEntity : class
  {
    var rowType = table.GetType().GetGenericArguments()[0];
    var tableName = table.Context.Mapping.GetTable(rowType).TableName;
    var sqlCommand = String.Format("TRUNCATE TABLE {0}", tableName);
    table.Context.ExecuteCommand(sqlCommand);
  }
}
票数 13
EN

Stack Overflow用户

发布于 2020-07-10 06:18:18

您还可以使用以下命令:

代码语言:javascript
复制
Public void BorraFilasTabla()
{
 using(basededatos db = new basededatos())
 {
  var ListaParaBorrar = db.Tabla.Tolist();
  db.Tabla.RemoveRange(ListaParaBorrar); 
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1516962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档