删除最后N条记录,实体框架

时间:2016-05-14 13:50:43

标签: c# entity-framework entity-framework-6

我使用以下代码删除实体框架中的最后N条记录:

获取最后N个元素的扩展方法,取自here

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(虽然我第一次努力找不到一个)?

3 个答案:

答案 0 :(得分:1)

你拥有的方法还可以。 RemoveRange()方法用于从数据库中删除多个项目。你用来获得最后n项的方法也没关系。但是TakeLast()只会根据添加到数据库的顺序返回最后一项。

答案 1 :(得分:1)

怎么样:

var lastN = MyDbContext.MyDbSet
                       .OrderByDescending(g => g.Id)
                       .Take(N);

MyDbContext.MyDbSet.RemoveRange(lastN);

答案 2 :(得分:0)

我会建议这样的事情

var lastUser = MyDbContext.Users.Select(g => g.Id).Max();
  

这将获得具有最大ID的用户并删除该用户。这是解决方法,我不知道有任何简单的解决方法。我相信这比你问题中描述的查询更有效。仍然只有项目而不是列表

但只会获得最后一项

MyDbContext.Users.Remove(lastUser);
MyDbContext.SaveChanges();