LINQ WHERE

SAMUKA 17/06/2011 16:12:42
#377124
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??
ASHKATCHUP 17/06/2011 22:52:26
#377136
Infelizmente não, pois o LINQ é compilado.
KERPLUNK 22/06/2011 11:59:00
#377510
Resposta escolhida
Se vc usar uma expressão Lambda, pode usar o método Contain
SAMUKA 17/11/2011 09:45:30
#389270
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;
CARLOSRAMIREZ 17/11/2011 10:19:27
#389281
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;
SAMUKA 17/11/2011 11:28:32
#389283
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
Tópico encerrado , respostas não são mais permitidas