Więc tworzę bazy danych, która umożliwia użytkownikom tworzenie "magicznej pozycji", którą mogą następnie przesłać do mojego API Web ASP.NET. Działa to dobrze. I chcę pokazać wszystkie te przedmioty na mojej stronie internetowej, ciągnąc je z API. To również działa dobrze. Ale teraz, gdy próbuję filtrować, sortować lub ograniczyć ilość wyszukiwań, nadal otrzymuję podstawową listę każdego przedmiotu powrócił do mnie. W tej chwili jest tylko 14 wpisów, więc żadna wielka sprawa, ale nadal chcę to zrobić. Ale cokolwiek robię, zawsze zwraca pełną listę.

Jest to kontroler ASP.NET w Visual Studio:

[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();
    }
}
2
MyNameIsGuzse 2 czerwiec 2018, 16:52

2 odpowiedzi

Najlepsza odpowiedź

Już prawie jesteś:

Po prostu użyj:

return query.ToList();

Zamiast:

return context.MagicItems.ToList();
3
Stefan 2 czerwiec 2018, 13:55

W poprzedniej wersji kodu nie użyłem jeszcze stronicowania, więc stworzyłem listę przedmiotów w samej linii powrotnej. Muszę wszystko, co musiałem zrobić, było rzeczywiście zwrócić zapytanie, nad którym pracuję.

0
MyNameIsGuzse 2 czerwiec 2018, 13:57