Как фильтровать данные по нескольким критериям - PullRequest
0 голосов
/ 04 апреля 2019

Здравствуйте, не могли бы вы помочь с этим. Я использую приложение asp.net mvc 5, мой домашний вид состоит из 2 частей. Один, где данные показаны, а другой, который фильтрует эти данные. Пока я просто показываю все свои данные без фильтрации. Я прочитал несколько учебных пособий, но они используют меньше свойств для фильтрации. В моем случае у меня действительно большие данные для фильтрации (более 10 свойств).

Итак, я нашел рекомендацию использовать viewmodel в качестве параметра для фильтра, но не было никаких предложений о том, как реализовать представление и контроллер.

Я подготовился к этой работе, взял всю логику из контроллера, создал отдельный класс, называемый бизнес-логикой, и поместил туда следующий код:

public IQueryable<ModelDTO> GetData(FilterViewModel filter)
{
    var main = (from data in db.Table
                    // Other commands
                select new
                {
                    data.Id,
                    data.Title,
                    data.Creteria1,
                    data.Creteria2,
                    // Other fields
                }).ToList();

    // Other logic

    if (filter != null)
    {
        // TODO develop the filter logic
        if (filter.Creteria1.HasValue)
        {
            main = main.Where(x => x.Creteria1 == filter.Creteria1);
        }
        if (filter.Creteria2.HasValue)
        {
            main = main.Where(x => x.Creteria2 == filter.Creteria2);
        }
        // etc.
    }

    return main.AsQueryable();
}

My controller looks like this:

public ActionResult Index(FilterViewModel f)
{
    var b = new BusinessLogic();
    var m = b.GetData(f);
    return View(m);
}

На мой взгляд, я реализовал html-формы со всеми полями, как сопоставить их с FilterViewModel?

Мне нужно всякий раз, когда пользователь меняет поля в форме фильтра и нажимает кнопку «Отправить» для фильтрации данных.

Мне нужно по умолчанию заполнить FilterViewModel, поэтому изначально он загрузит все данные.

Также, на мой взгляд, я использую DTOModel, поэтому я не могу просто использовать FilterViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...