WEB API IQueryable skip()take()

时间:2018-06-20 17:29:16

标签: c# linq asp.net-web-api

所以我想在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个元素。

4 个答案:

答案 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;

    }