LINQ WHERE
Olá Pessoal,
Como eu monto uma consulta LINQ onde seja possivel onde o numero de parametros variem:
Ex:
var lista = from a in context.tbClientes
where a.UF == [Ô]SP[Ô] && a.Vendedor ==[Ô]Paulo[Ô]
select new {a.Nome, a.Cidade}
var lista = from a in context.tbClientes
where a.UF == [Ô]SP[Ô]
select new {a.Nome, a.Cidade}
No primeiro caso só tenho um parametro que é UF, no segundo tenho 2.
O que varia é o Vendedor, se estiver selecionado, então quero filtrar, caso contrario, pode ser todos vendedores.
Mas gostaria de fazer isso numa unica Consulta LINQ. Existe como??
Como eu monto uma consulta LINQ onde seja possivel onde o numero de parametros variem:
Ex:
var lista = from a in context.tbClientes
where a.UF == [Ô]SP[Ô] && a.Vendedor ==[Ô]Paulo[Ô]
select new {a.Nome, a.Cidade}
var lista = from a in context.tbClientes
where a.UF == [Ô]SP[Ô]
select new {a.Nome, a.Cidade}
No primeiro caso só tenho um parametro que é UF, no segundo tenho 2.
O que varia é o Vendedor, se estiver selecionado, então quero filtrar, caso contrario, pode ser todos vendedores.
Mas gostaria de fazer isso numa unica Consulta LINQ. Existe como??
Infelizmente não, pois o LINQ é compilado.
Se vc usar uma expressão Lambda, pode usar o método Contain
Depois de um tempo ocupado, voltei a mexer nisso e descobri que existem algumas formas de se fazer isso:
var lista = from a in context.tbClientes
select new {a.Nome, a.Cidade, a.UF, a.Vendedor};
if ( !txtUF.Text.Equals([Ô][Ô]) )
lista = lista.Where(c => c.UF == txtUF.Text);
if ( !txtVendedor.Text.Equals([Ô][Ô]) )
lista = lista.Where(c => c.Vendedor == txtVendedor.Text);
return lista;
Um outra solução é você utilizar DataSet e DataView. Com o DataView, você pode efetuar filtros e depois passar somente o conteudo filtrado para um outro DataSet. Abaixo, segue um trecho do código em que fiz algo similar. Está meio confuso, mas aqui no trabalho só tenho este código que fiz correndo, o melhor estruturado está em casa. Espero que ajude
DataSet dsturmas = new DataSet();
DataSet dsretorno = new DataSet();
DataView dvx = new DataView();
string filtro;
dsturmas = ObterDadosTurmasXML(turma);
filtro = [Ô]CodDisciplina in ([Ô] + listadisciplinas + [Ô])[Ô];
dvx = dsturmas.Tables[0].DefaultView;
dvx.RowFilter = filtro;
filtro = [Ô][Ô];
for (int i = 0; i < dvx.Count; i++)
{
horarioturmas.CodDisciplina = Convert.ToInt16(dvx[i][[Ô]CodDisciplina[Ô]]);
horarioturmas.NumTurma = Convert.ToInt16(dvx[i][[Ô]NumTurma[Ô]]);
if (! dadoshorarioturmas.VerificarTurmaApta(horarioturmas, dshorariosselecionados))
{
filtro = filtro + [Ô] AND (NOT (CodDisciplina = [Ô] + horarioturmas.CodDisciplina.ToString() +
[Ô] AND NumTurma = [Ô] + horarioturmas.NumTurma.ToString () + [Ô]))[Ô];
}
}
dvx.RowFilter = dvx.RowFilter + filtro;
dsretorno.Tables.Add(dvx.ToTable());
return dsretorno;
CARLOSRAMIREZ, pelo que vi a solução em LINQ é muito mais rápida, talvez pq traz do Banco apenas o necessário.
Ainda to começando a fuçar com LINQ, mas pelo que vi é muito interessante
Ainda to começando a fuçar com LINQ, mas pelo que vi é muito interessante
Tópico encerrado , respostas não são mais permitidas