如何使用多个条件过滤数据

时间:2019-04-04 08:47:53

标签: c# asp.net-mvc entity-framework linq filtering

您好,请您帮忙。我正在使用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。

0 个答案:

没有答案