我得到最大 id
db.info_dbs.Max(u => u.id);
我如何获得上一个 id 和(下一个 id(在上一个之后))
这会按 Id 降序对集合进行排序,跳过第一个,然后抓取集合中的下一个。那是你要找的吗?
var collection = new[]
{
new { Id = 1 },
new { Id = 3 },
new { Id = 2 },
new { Id = 5 }
};
var secondHighestIdValue = collection.OrderByDescending(x => x.Id).Skip(1).First();
Console.WriteLine(secondHighestIdValue); // { Id = 3 }
这个 Id 字段是身份列吗?上一个是 Max(Id) - 1,下一个 Id 是 Max(id) + 1。
但是,使用这样的标识列将是一个坏主意,因为您可以同时在数据库中运行许多事务,并且不能保证您计算的下一个/上一个值在您使用时是正确的他们以后。
如果您还需要什么,请告诉我。
给定一个 ID(在我的情况下是一张图片),这里如何获取下一张图片 id 和上一张图片 id。我使用这两种辅助方法:
public int GetPreviousPictureId(int id)
{
var picture = db.Pictures.Where(x => x.Id < id).OrderByDescending(x => x.Id).FirstOrDefault();
if (picture != null)
return picture.Id;
return 0;
}
public int GetNextPictureId(int id)
{
var picture = db.Pictures.Where(x => x.Id > id).OrderBy(x => x.Id).FirstOrDefault();
if (picture != null)
return picture.Id;
return 0;
}
为了获得上一个,我通过仅获取具有较低 id的图片来过滤图片,按 id 降序排列,以便列表的第一个元素(FirstOrDefault)是我需要的。
为了获得下一个,我做相反的事情。我通过仅获取具有更高 id的图片来过滤图片,按 id 升序排列,以便列表的第一个元素是我需要的。
如您所见,我检查是否为 null,如果不为 null,则返回 id。如果没有找到图片,则返回 0。如果没有找到,一些开发人员更喜欢返回 -1。由你决定。
DB的第一张图片没有以前的。DB的最后一张图片没有下一张。
希望这会有所帮助(实际上应该回答这个问题)。