几个月前我开始在asp.net MVC工作。我现在在C#中使用MVC4和EF5.0。
- 对于这种看似简单的情况,我还没有找到一个直接的答案和工作解决方案......
问题:在控制器操作中,我希望能够根据我在视图中看到的实际ID移动到下一条记录。我正在尝试在视图中有一个链接或按钮,以导航到下一条记录。请注意,这不是下一个序列号(因为您看到的ID是245,而下一个记录的ID可能是296)。
我尝试过这种方法(类似于另一篇文章):
在控制器(编辑方法)中:
`// Pk is the id that is passed into the Edit method
var nextID = db.Customers.OrderBy(i => i.Pk)
.SkipWhile(i => i.Pk != customer.Pk)
.Skip(1)
.Select(i => i.Pk);
ViewBag.NextID = nextID;
...
...some other not relevant code...
...
return View(customer);`
但是, 在视图中,ViewBag.NextID正在接收:System.Data.Objects.ObjectQuery`1(而不是下一个ID 296)。
欢迎任何帮助,建议和提示。
答案 0 :(得分:2)
您的LINQ查询返回IQuerable<Customer>
。如果您想要退回单个客户,则必须在查询结尾处使用.First()
或.Single()
。但是,您也可以使查询更简单,如下所示:
var nextID = db.Customers.OrderBy(i => i.Pk).First(i => i.Pk > customer.Pk).Pk;
这将返回大于给定值的第一个客户ID(Pk)。
答案 1 :(得分:0)
您还没有告诉它返回单个项目。如果在LINQ查询的末尾添加.First()
之类的内容,那么你应该很好。
答案 2 :(得分:0)
我还要补充一点,在结果可能不会返回任何内容的环境中,通常会说你应该使用FirstOrDefault,因为如果没有结果就不会炸弹,并且会返回该类型的默认值。如果没有找到记录,则First()将抛出异常。