【发布时间】:2018-06-20 17:29:15
【问题描述】:
所以我想在 C# ASP.NET Web Api 中分割一个“IQueryable”,但我无法让它工作。使用下面的代码可能会更清楚我想要做什么。
private TestTwoContext db = new TestTwoContext();
// GET: api/Fruits/thefruits
[HttpGet]
[Route("api/Fruits/thefruits")]
public IQueryable<Fruits> TheFruits()
{
dynamic myList = db.Fruits;
var FiveItems = Queryable.Take(Queryable.Skip(myList, 5), 5);
return FiveItems;
}
这在浏览器控制台中给了我错误:
jquery-3.3.1.min.js:2 GET http://localhost:49771/api/Fruits/thefruits 500(内部服务器错误)
我需要将我的列表 (db.Fruits) 从第 5 个元素剪切到第 10 个元素。 就像我们在 JavaScript 中对数组进行切片一样。 示例:
var myList = array.slice(5, 10)
我也试过这个:
private TestTwoContext db = new TestTwoContext();
// GET: api/Fruits/thefruits
[HttpGet]
[Route("api/Fruits/thefruits")]
public IQueryable<Fruits> TheFruits()
{
var myList = db.Fruits;
var FiveItems = myList.Skip(5).Take(4);
return FiveItems;
}
这给了我浏览器控制台中的错误: jquery-3.3.1.min.js:2 GET http://localhost:49771/api/Fruits/thefruits 500(内部服务器错误)
skip 和 take 中的数字将作为参数传递,但这不是我担心的部分……这些数字现在只是示例。任何帮助将不胜感激。
这个控制器可以正常工作:
// GET: api/Fruits
public IQueryable<Fruits> GetFruits()
{
return db.Fruits;
}
返回整个水果列表,稍后我将其写在 HTML 的表格中。
这也有效:
[HttpGet]
[Route("api/Fruits/thefruits")]
public IQueryable<Fruits> TheFruits()
{
var myList = db.Fruits;
var FiveItems = myList.Take(5);
return FiveItems;
}
但它给了我前 5 个元素...不是从第 5 到第 10 个元素。
【问题讨论】:
-
请包括您尝试的实际和预期结果。 "It's not working" is not helpful
-
什么不完全有效?
.Skip(x).Take(y)是一种非常常见的技术。除了你的变量假设你得到 5 个项目,但你只拿了 4 个。 -
哦,你也不能通过 WebAPI 返回
IQueryable。你真的应该返回IEnumerable<Fruits>和return FiveItems.ToList(); -
如果这将基于传入的参数,那么选择是否必须基于索引?或者您可以传递您选择的 Fruit 的特定属性吗?
-
Skip和Take是扩展方法,旨在像类方法一样使用:db.Fruits.Skip(5).Take(5)。另外,为什么myList是动态的?这并没有提供任何有用的东西,实际上它会损害性能和类型安全。
标签: c# linq asp.net-web-api