【问题标题】:linq previous next item?linq 上一个 下一个项目?
【发布时间】:2012-09-08 20:36:16
【问题描述】:

我得到最大 id

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

我如何获得前一个 id 和 (next id (after previous))

【问题讨论】:

  • 上一个之后的下一个 = 当前?您所说的“上一个”和“下一个”是什么意思?您的意思是“前 3 个值” - 即 Max,下一个较小的值,以及另一个?还是集合中每条记录的下一个和上一个 ID?
  • 使用 OrderBy、Skip 和 First/FirstOrDefault。

标签: c# asp.net linq


【解决方案1】:

这会按 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 }

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 2015-01-12
        • 2013-02-23
        相关资源
        最近更新 更多