pagedList 中的多个查询

Multiple queries in pagedList

我传递了一些查询字符串来过滤分页列表中的结果,但是一个查询覆盖了另一个,如何在分页列表中进行多重过滤?

这是我的代码:

string _dataIni = null;
string _dataFim = null;

IPagedList ocorrencias = null;

if(codOccu > 0)
{
    ocorrencias = db.CRM_OCORRENCIAS.Where(o => o.ID_OCORRENCIA == codOccu)
              .OrderByDescending(o => o.ID_OCORRENCIA)
              .ToPagedList(pagina, 40);
}

if (nomeEmp.Length > 0)
{
    ocorrencias = db.CRM_OCORRENCIAS.Where(o => o.CLIENTES.NOMEFAN.Contains(nomeEmp) || o.CLIENTES.NOMERAZAO.Contains(nomeEmp))
               .OrderByDescending(o => o.ID_OCORRENCIA)
               .ToPagedList(pagina, 40);
}

if(dtAbert != null && dtFinal != null)
{
    ocorrencias = db.CRM_OCORRENCIAS.Where(o => o.DTABERTURA >= dtAbert && o.DTABERTURA <= dtFinal)
              .OrderByDescending(o => o.ID_OCORRENCIA)
              .ToPagedList(pagina, 40);
                _dataIni = Convert.ToDateTime(dtAbert).ToString("yyyy-MM-dd");
                _dataFim = Convert.ToDateTime(dtFinal).ToString("yyyy-MM-dd");
}

//   
if (codOccu == 0 && nomeEmp == "" && dtAbert == null && dtFinal == null)
                ocorrencias = db.CRM_OCORRENCIAS
               .OrderByDescending(o => o.ID_OCORRENCIA)
               .ToPagedList(pagina, 40);


ViewBag.DataIni = _dataIni;
ViewBag.DataFim = _dataFim;
ViewBag.Empresas = nomeEmp;

return View(ocorrencias);

看起来查询确实被覆盖了。您可以附加多个 where 子句。我还没有编译它,但试试这个

if (codOccu > 0)
            {
                ocorrencias = db.CRM_OCORRENCIAS.Where(o => o.ID_OCORRENCIA == codOccu)
                          .OrderByDescending(o => o.ID_OCORRENCIA);
            }

            if (nomeEmp.Length > 0)
            {
                ocorrencias = ocorrencias.Where(o => o.CLIENTES.NOMEFAN.Contains(nomeEmp) || o.CLIENTES.NOMERAZAO.Contains(nomeEmp))
                           .OrderByDescending(o => o.ID_OCORRENCIA);
            }

            if (dtAbert != null && dtFinal != null)
            {
                ocorrencias = ocorrencias.Where(o => o.DTABERTURA >= dtAbert && o.DTABERTURA <= dtFinal)
                          .OrderByDescending(o => o.ID_OCORRENCIA);
                _dataIni = Convert.ToDateTime(dtAbert).ToString("yyyy-MM-dd");
                _dataFim = Convert.ToDateTime(dtFinal).ToString("yyyy-MM-dd");
            }

            //   
            if (codOccu == 0 && nomeEmp == "" && dtAbert == null && dtFinal == null)
                ocorrencias = db.CRM_OCORRENCIAS;

            return return View(ocorrencias.OrderByDescending(o => o.ID_OCORRENCIA).ToPagedList(pagina, 40));

有了上面的 post 并期待在微软教程中我设法找到这个教程:sorting, filtering and paging with entity framework 我的解决方案最终是这样的:

var ocorrencias = from s in db.CRM_OCORRENCIAS
                   select s;

    if(codOccu > 0)
    {
        ocorrencias = ocorrencias.Where(o => o.ID_OCORRENCIA == codOccu);
    }
    if (!String.IsNullOrEmpty(nomeEmp))
    {
        ocorrencias = ocorrencias.Where(o => o.CLIENTES.NOMEFAN.Contains(nomeEmp) || o.CLIENTES.NOMERAZAO.Contains(nomeEmp));
    }
    if (dtAbert != null && dtFinal != null)
    {
        ocorrencias = ocorrencias.Where(o => o.DTABERTURA >= dtAbert && o.DTABERTURA <= dtFinal);
        _dataIni = Convert.ToDateTime(dtAbert).ToString("yyyy-MM-dd");
        _dataFim = Convert.ToDateTime(dtFinal).ToString("yyyy-MM-dd");
    }

    return View(ocorrencias.ToPagedList(pagina, 40));