使用 Entity Framework 获取特定 Id 的下一个和上一个实体?
Get next and previous entity of specific Id with Entity Framework?
我有一个员工表单,用于使用 ASP.NET MVC5 在我的项目中编辑或显示个人信息,此表单得到一个 Id
并显示员工信息。
在这个表单中,我必须有 Next
和 Previous
按钮,以允许管理员导航到下一个或上一个员工(如果没有员工,按钮应该被禁用)。另一方面,此表单有一个由管理员设置的变量排序。
所以我想放置两个 <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>
我有一个员工表单,用于使用 ASP.NET MVC5 在我的项目中编辑或显示个人信息,此表单得到一个 Id
并显示员工信息。
在这个表单中,我必须有 Next
和 Previous
按钮,以允许管理员导航到下一个或上一个员工(如果没有员工,按钮应该被禁用)。另一方面,此表单有一个由管理员设置的变量排序。
所以我想放置两个 <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>