所以我想在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(内部服务器错误)
跳过和带走中的数字将作为参量传递,但这不是我担心的部分...这些数字现在仅是示例。任何帮助将不胜感激。
此控制器可以正常工作:
// 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个元素。
答案 0 :(得分:4)
如果您发布了500错误,那就太好了,但是作为一个猜测,可能是因为如果没有在EntityFramework中调用订单,就无法Skip
[HttpGet]
[Route("api/Fruits/thefruits")]
public IQueryable<Fruits> TheFruits()
{
return db.Fruits.OrderBy(x => x.Id).Skip(4).Take(5);
}
答案 1 :(得分:0)
尝试此操作以了解Skip()和Take()。
var list = new List<long>{0,1,2,3,4,5,6,7,8,9};
var secondList = list.AsQueryable().Skip(5).Take(5).ToList();
secondList
Skip(X)->它忽略Iqueryable上的前X个项目
Take(Y)->限制最大结果数。
输出是:
List<long>(5) { 5, 6, 7, 8, 9 }
答案 2 :(得分:-1)
尝试将“ TheFruits”方法更新为以下内容:
// GET: api/Fruits/thefruits
[HttpGet]
[Route("api/Fruits/thefruits")]
public IQueryable<Fruits> TheFruits()
{
dynamic myList = db.Fruits;
var FiveItems = myList.Skip(5).Take(5);
return FiveItems;
}
示例控制台应用程序:
using System.Linq;
static void Main(string[] args)
{
int[] test = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
var t = test.AsQueryable().Skip(5).Take(5);
foreach (int i in t)
{
Console.WriteLine(i.ToString());
}
Console.ReadLine();
}
答案 3 :(得分:-1)
这是我要做的工作:
[HttpGet]
[Route("api/Fruits/thefruits")]
public List<Fruits> TheFruits()
{
var myList = db.Fruits;
var FiveItems = myList.AsEnumerable().Skip(5).Take(5).ToList();
return FiveItems;
}