使用 Entity Framework 获取特定 Id 的下一个和上一个实体?

Get next and previous entity of specific Id with Entity Framework?

我有一个员工表单,用于使用 ASP.NET MVC5 在我的项目中编辑或显示个人信息,此表单得到一个 Id 并显示员工信息。

在这个表单中,我必须有 NextPrevious 按钮,以允许管理员导航到下一个或上一个员工(如果没有员工,按钮应该被禁用)。另一方面,此表单有一个由管理员设置的变量排序。

所以我想放置两个 <a /> 标签,其中包含链接到员工表单的下一个和上一个员工 ID。

<< Previous employee Id by sorting             Next employee Id by sorting >>

我知道我应该如何获得当前员工,这在 Entity Framework 中非常简单。

但是如何使用 Entity Framework 获取当前 Id 的下一个和上一个 Id?

如果我对你的问题理解正确,"next" 或 "previous" 的概念与你用来排序的规则有关。现在,让我使用简单的 "order by ID" 作为排序规则。通过 3 个查询,您可以获得当前、下一个和上一个项目:

int id = 562;  // the current id
var curr = (from x in dbCtx.Employees where x.ID == id select x).Single();
var prev = (from x in dbCtx.Employees where x.ID < id orderby x.ID descending select x).FirstOrDefault();
var next = (from x in dbCtx.Employees where x.ID > id orderby x.ID ascending select x).FirstOrDefault();

您可以将 3 个查询减少到 2 个。第一个和第二个可以在单个查询中混合使用。此查询 return 当前和上一个项目:

(from x in dbCtx.Employees where x.ID <= id orderby x.ID descending select x).take(2)  

我在为我的博客开发编辑器时遇到了这个问题。我基本上希望能够快速跳转到上一页和下一页。下面是我的实现,似乎运行良好。

在我的 PageController 中,我添加了两个新的 ActionResults:

public ActionResult EditNext(int id)
{
    Page next= db.Pages.Where(x => x.Id > id).FirstOrDefault();
    return View("~/Areas/Admin/Views/Pages/Edit.cshtml", next);
}

public ActionResult EditPrev(int id)
{
    Page prev = db.Pages.Where(x => x.Id < id).OrderByDescending(y => y.Id).FirstOrDefault();
    return View("~/Areas/Admin/Views/Pages/Edit.cshtml", prev);
}

然后在我的剃刀视图中,我简单地这样称呼它们:

<div layout="row" layout-align="space-between center" ng-cloak> 
    <md-button class="md-primary md-btn-small" href="@Url.Action("EditPrev", "Pages", new { id = Model.Id })">Previous</md-button>
    <md-button class="md-primary md-btn-small" href="@Url.Action("EditNext", "Pages", new { id = Model.Id })">Next</md-button>
</div>