当前位置: 动力学知识库 > 问答 > 编程问答 >

c# - Dynamic EF Where Clause raising ArgumentNullException

问题描述:

I'm trying to code a method that, in it's class given the values of some of the attributes, returns a filtered DbSet. The code, so far, is:

 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();

}

Problem is: everytime one of the attributes is filled with some value (i.e.: this.Filtro.Nome = "test" ), the ToList() raises an ArgumentNullExcpetion. Any ideas?

网友答案:

You shouldn't cast to DbSet at the end of each line. Also, declare

IQueryable<Pesquisa> temp = db.Pesuisas;

// your code follows.

The reason behind it is that although you start with a DbSet, applying operators changes its type. Your dynamic cast returns null then.

分享给朋友:
您可能感兴趣的文章:
随机阅读: