删除最后的N条记录,Entity Framework。

4

我使用以下代码在Entity Framework中删除最后N条记录:

这里获取的扩展方法以获取最后N个元素:

public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N)
{
    return source.Skip(Math.Max(0, source.Count() - N));
}

删除最后N个元素:

MyDbContext.MyDbSet.RemoveRange(MyDbContext.MyDbSet.TakeLast(N));

这个方法是否有效?我不想重复造轮子。也许我错过了一些现有的函数,如collection.RemoveLast(尽管我在第一次尝试中找不到它)?


EF提供了Remove方法来满足需求中的删除操作。我认为,TakeLast会遍历整个数据库以获取最后一个元素,如果数据量很大,则效率低下。跳过所有先前的数据对我来说不是很好。尝试使用TakeLast,其中您可以获得DbSet.LastOrDefault并删除该项。 - Eldho
@Eldho:在我的情况下,我想要删除的不仅是最后一个元素,而是最后的几个元素。 - Bad
RemoveRange 是可以的,但是如何获取最后几个元素呢? - Eldho
2个回答

1
您的方法是可以的。 RemoveRange() 方法用于从数据库中删除多个项目。而您使用的获取最后 n 个项目的方法也可以。但是,TakeLast() 只会按照它们添加到数据库中的顺序返回最后的项目。

1
怎么样:
var lastN = MyDbContext.MyDbSet
                       .OrderByDescending(g => g.Id)
                       .Take(N);

MyDbContext.MyDbSet.RemoveRange(lastN);

如果ID是GUID而不是整数,该怎么办? - Amit Hasan
问题中没有指定任何一个。 - aligray
OP所拥有的扩展方法将在任何情况下都能起作用。 - Amit Hasan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接