0

我正在尝试编写一种方法,在给定某些属性的值的类中,该方法返回过滤后的 DbSet。到目前为止,代码是:

    public IEnumerable<Pesquisa> Pesquisas { 
        get {
            PrometheusDBContext db = new PrometheusDBContext();
            var temp = db.Pesquisas;

            if ((this.Filtro.Nome != null) && (this.Filtro.Nome.Trim() != ""))
            {
                temp = (temp.Where(p => SqlFunctions.PatIndex(this.Filtro.Nome, p.Nome) > 0) as DbSet<Pesquisa>);
            }

            if ((this.Filtro.CodTipoPesquisa != null) && (this.Filtro.CodTipoPesquisa.Trim() != ""))
            {
                temp = (temp.Where(p => p.CodTipoPesquisa == this.Filtro.CodTipoPesquisa.Trim()) as DbSet<Pesquisa>);
            }

            if ((this.Filtro.IDStatusPesquisa != null) && (this.Filtro.IDStatusPesquisa > 0))
            {
                temp = (temp.Where(p => p.IDStatusPesquisa == this.Filtro.IDStatusPesquisa) as DbSet<Pesquisa>);
            }

            if ((this.Filtro.DataCriacao_Inicial != null) && (this.Filtro.DataCriacao_Final != null))
            {
                temp = (temp.Where(p => (p.DataCriacao >= this.Filtro.DataCriacao_Inicial) && (p.DataCriacao <= this.Filtro.DataCriacao_Final)) as DbSet<Pesquisa>);
            }
            else 
            {
                if (this.Filtro.DataCriacao_Inicial != null)
                {
                    temp = (temp.Where(p => p.DataCriacao >= this.Filtro.DataCriacao_Inicial) as DbSet<Pesquisa>);
                }
                if (this.Filtro.DataCriacao_Final != null)
                {
                    temp = (temp.Where(p => p.DataCriacao <= this.Filtro.DataCriacao_Final) as DbSet<Pesquisa>);
                }
            }

            return temp
                .Include(p => p.Usuario)
                .Include(p => p.StatusPesquisa)
                .Include(p => p.TipoPesquisa)
                .Include(p => p.ModeloTermoAdesao)
                .Include(p => p.Pacientes)
                .ToList();
        } 

问题是:每次属性之一填充某个值(即:this.Filtro.Nome = "test")时,ToList() 都会引发 ArgumentNullExcpetion。有任何想法吗?

4

1 回答 1

2

您不应该在每行的末尾强制转换为 DbSet。另外,声明

IQueryable<Pesquisa> temp = db.Pesuisas;

// your code follows.

其背后的原因是,尽管您从 DbSet 开始,但应用运算符会更改其类型。然后您的动态转换返回 null 。

于 2013-09-03T18:41:30.070 回答