c# - ASP.NET Core Web API 中的过滤结果

标签 c# asp.net-core .net-core asp.net-core-webapi

因此,我正在创建一个数据库,允许用户创建“神奇项目”,然后将其上传到我的 ASP.net Web API。这很好用。我想通过从 api 中提取所有这些项目来在我的网页中显示它们。这也很好用。但现在,当我尝试过滤、排序或限制搜索量时,我仍然可以获得返回给我的每个项目的基本列表。现在,只有 14 个条目,所以没什么大不了的,但我仍然想完成这个。但无论我做什么,它总是返回完整的列表。

这是 Visual Studio 中的 ASP.net Controller :

[Route("api/v1/MagicItem")]
public class MagicItemController : Controller
{
    private ItemListContext context;

    public MagicItemController(ItemListContext context)
    {
        this.context = context;
    }

    [Produces("application/json")]
    [HttpGet]
    //public List<MagicItem> GetAllItems(string name, string category, string rarity, int? page, string sort, int limit = 5, string dir = "desc")
    public List<MagicItem> GetAllItems(
        string name, 
        string category, 
        string rarity, 
        int? page, 
        string sort,
        int limit = 5,
        string dir = "desc")
    {
        IQueryable<MagicItem> query = context.MagicItems;

        if (!string.IsNullOrWhiteSpace(name))
            query = query.Where(d => d.Name.Contains(name));
        if (!string.IsNullOrWhiteSpace(category))
            query = query.Where(d => d.Category == category);
        if (!string.IsNullOrWhiteSpace(rarity))
            query = query.Where(d => d.Rarity == rarity);


        if (!string.IsNullOrWhiteSpace(sort))
        {
            switch (sort)
            {
                case "Name":
                    if (dir == "asc")
                        query = query.OrderBy(d => d.Name);
                    else if (dir == "desc")
                        query = query.OrderByDescending(d => d.Name);
                    break;
                case "Rarity":
                    if (dir == "asc")
                        query = query.OrderBy(d => d.Rarity);
                    else if (dir == "desc")
                        query = query.OrderByDescending(d => d.Rarity);
                    break;
                case "Category":
                    if (dir == "asc")
                        query = query.OrderBy(d => d.Category);
                    else if (dir == "desc")
                        query = query.OrderByDescending(d => d.Category);
                    break;
            }
        }
        query = query.Take(limit);
        if (page.HasValue)
            query = query.Skip(page.Value * limit);

        return context.MagicItems.ToList();
    }
}

最佳答案

你就快到了:

只需使用:

return query.ToList();

而不是:

return context.MagicItems.ToList();

关于c# - ASP.NET Core Web API 中的过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657614/

相关文章:

c# - 具有参数条件的简单工厂,使用 Unity 2.0

c# - 很奇怪——线程在读取 `dynamic` COM 对象的简单属性时挂起

c# - 使用 Entity Framework Core 在 SQL Server 查询中参数化 OPENJSON

visual-studio - 如何将 EF 迁移应用到 Azure 中托管的数据库?

c# - 如何将 C# 对象列表转换为 Protocol Buffer 列表?

c# - 在没有 DTO 类的情况下发布多个参数

C#和月历,选择多个日期

c# - 使用 Linq 从另一个表中获取按记录数排序的列表

http - Cookie 和 ASP.NET Core

c# - 使用 ImageSharp 加载的纹理显示白色 (opentk)