要删除表中的所有行,我目前正在执行以下操作:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
然而,这似乎需要很长时间。有没有更快的方法?
发布于 2011-10-27 14:17:46
不幸的是,LINQ-to-SQL不能很好地执行基于集合的查询。
你可能会认为
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
将转化为类似这样的内容
DELETE FROM [Entities]
但不幸的是它更像是
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,则需要编写存储过程。
发布于 2013-01-29 04:29:10
我喜欢使用扩展方法,如下所示:
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);
}
}
发布于 2020-07-10 06:18:18
您还可以使用以下命令:
Public void BorraFilasTabla()
{
using(basededatos db = new basededatos())
{
var ListaParaBorrar = db.Tabla.Tolist();
db.Tabla.RemoveRange(ListaParaBorrar);
}
}
https://stackoverflow.com/questions/1516962
复制相似问题