【问题标题】:Get next / previous record in ASP.NET Core MVC using Dapper使用 Dapper 在 ASP.NET Core MVC 中获取下一条/上一条记录
【发布时间】:2022-01-12 23:17:46
【问题描述】:

我将列表数据拉入网格,并在“详细视图”中逐一查看它们。我正在尝试添加一个“下一个/上一个”按钮,让我可以轻松地在列表中每个项目的详细信息之间导航。

这是我在控制器中使用的代码

var nextID = _movieRepository.GetAll()
                             .OrderBy(i => i.movie_id)
                             .SkipWhile(i => i.movie_id != i.movie_id)
                             .Skip(1)
                             .Select(i => i.movie_id);

ViewBag.NextID = nextID;

在我的断点内,它只返回“nextID = NULL”,这意味着它不会在我的 URL 末尾生成适当的下一个记录 ID。注意:我在我的控制器中使用 Linq 命名空间,但我没有使用 EF。这是我认为的简单代码。

<a href="/@ViewData["Controller"]/@ViewData["Action"]/@ViewBag.nextID"> Next Movie </a>

我一直在谷歌搜索,尝试不同的方法,不同的 Skip/SkipWhile/Select/FirstOrDefault 组合,但没有任何效果。非常感谢您对此提供任何帮助或见解。

【问题讨论】:

  • 如果您通过movie_id 订购,则可以仅使用where 和first 或default 检索传递的id 之后的下一个。我错过了什么吗?
  • 不清楚您到底需要什么帮助:LINQ 表达式、通过ViewDataViewBag 生成URL,还是其他?您期望从 LINQ 语句返回什么?
  • 我没有在我的 ViewBag 中使用上面指定的 Linq 表达式获取任何值来检索“下一步”按钮的下一条记录。
  • 经过一番摆弄,我可以让它仍然返回“NULL”,或者它返回我的记录的全部详细信息 - 而不是简单的记录 ID。

标签: c# linq .net-core entity-framework-core asp.net-core-mvc


【解决方案1】:

您的代码中有错误

  .SkipWhile(i => i.movie_id != i.movie_id)

总是假的,所以你总是让所有记录减一,而不是一条记录。

我假设你有 movie_id 并且在此之后你需要下一个更大的 id,所以试试这个代码

var nextID = _movieRepository.GetAll()
                             .OrderBy(i => i.movie_id)
                             .Where(i => i.movie_id > movie_Id )
                             .Select(i => i.movie_id)
                             .FirstOrDefault();

这个查询将返回当前movie_id之后的下一个movie_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多