我使用以下代码删除实体框架中的最后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(虽然我第一次努力找不到一个)?
答案 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();