linq上一个下一个项目?

时间:2012-09-08 20:36:16

标签: c# asp.net linq

我得到最大身份

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

我如何获得之前的ID和(下一个id(之前的))

3 个答案:

答案 0 :(得分:2)

按顺序递减命令集合,跳过第一个集合,并在集合中绘制下一个图表。这就是你要找的东西吗?

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 }

答案 1 :(得分:1)

此Id字段是标识列吗?上一个是Max(Id) - 1,下一个Id是Max(id)+ 1。

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

如果您还有其他需要,请告诉我。

答案 2 :(得分: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)。 如果找不到图片则返回0 。如果没有找到,一些开发人员更喜欢返回-1。由你决定。

数据库的第一张图片没有前一张图片。 数据库的最后一张图片没有下一张。

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