0

我得到最大 id

db.info_dbs.Max(u => u.id);

我如何获得上一个 id 和(下一个 id(在上一个之后))

4

3 回答 3

2

这会按 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 }
于 2012-09-08T20:56:25.300 回答
1

这个 Id 字段是身份列吗?上一个是 Max(Id) - 1,下一个 Id 是 Max(id) + 1。

但是,使用这样的标识列将是一个坏主意,因为您可以同时在数据库中运行许多事务,并且不能保证您计算的下一个/上一个值在您使用时是正确的他们以后。

如果您还需要什么,请告诉我。

于 2012-09-08T20:52:16.930 回答
0

给定一个 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的最后一张图片没有下一张。

希望这会有所帮助(实际上应该回答这个问题)。

于 2015-01-29T10:20:43.703 回答