Usuário com melhor resposta
Mudar Select Dinamicamente

Pergunta
-
Pessoal,
Como fazer o Codigo abaixo em LINQ (Exemplo Ficticio) ?
Case "1"
ab = "select * from tabela where Campo='1'"
Case "2"
ab = "select * from tabela where Campo='1' and Campox=0"
Case "4"
ab = "select * from tabela where Campo='1' and Campox=0 and tipo='S'"
Case else
ab = "select * from tabela where Campo='0'"
End SelectDataI.rsGeral.Source = ab
DataI.rsGeral.openObrigado !
Respostas
-
Eu vejo duas maneiras:
a) usando uma maneira semelhante à sua:
dim q as IQueriable(Of TabelaReg)
Select Case Tipo
Case "1"
q = from c in dc.tabelawhere c.Campo="1"
select c
Case "2"
q = from c in dc.tabela
where c.Campo="1" && c.Campox="0"
select c
Case "4"
q = from c in dc.tabela
where c.Campo="1" && c.Campox="0" && c.tipo= "S"
select c
Case else
q = from c in dc.tabela
where c.Campo="0"
select c
End Select
Outra maneira é fazer algo assim:
dim cpo as String
if Tipo = "1" or Tipo = "2" or Tipo = "4" then
cpo = "1"
else
cpo = "0"
end if
dim q = from c in dc.tabela
where c.Campo=cpo
select c
if Tipo = "2" or Tipo = "4"
q = from d in q
where d.CampoX = "0"
select d
if Tipo = "4"
q = from e in q
where e.tipo = 0
select e
End If
End If
Bruno
Todas as Respostas
-
Eu vejo duas maneiras:
a) usando uma maneira semelhante à sua:
dim q as IQueriable(Of TabelaReg)
Select Case Tipo
Case "1"
q = from c in dc.tabelawhere c.Campo="1"
select c
Case "2"
q = from c in dc.tabela
where c.Campo="1" && c.Campox="0"
select c
Case "4"
q = from c in dc.tabela
where c.Campo="1" && c.Campox="0" && c.tipo= "S"
select c
Case else
q = from c in dc.tabela
where c.Campo="0"
select c
End Select
Outra maneira é fazer algo assim:
dim cpo as String
if Tipo = "1" or Tipo = "2" or Tipo = "4" then
cpo = "1"
else
cpo = "0"
end if
dim q = from c in dc.tabela
where c.Campo=cpo
select c
if Tipo = "2" or Tipo = "4"
q = from d in q
where d.CampoX = "0"
select d
if Tipo = "4"
q = from e in q
where e.tipo = 0
select e
End If
End If
Bruno
-
-
A query Linq em um banco de dados retorna um Generic IQueryable (é com y, não com i, como eu escrevi). Normalmente, você não precisa se preocupar com isso, e coloca algo como
dim q = from c in ....
e deixa o compilador gerar o tipo para você. Mas como não estou inicializando q no início (só estou declarando ele), isso não pode ser feito, assim tenho que ser explícito no tipo.
Bruno