none
Mudar Select Dinamicamente RRS feed

  • Pergunta

  •  

    Pessoal,

    Como fazer o Codigo abaixo em LINQ (Exemplo Ficticio) ?

     

    Select Case Tipo
     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 Select

    DataI.rsGeral.Source = ab
    DataI.rsGeral.open

     

     

    Obrigado !

     

    terça-feira, 18 de março de 2008 00:32

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.tabela

            where 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

          



    terça-feira, 18 de março de 2008 11:06

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.tabela

            where 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

          



    terça-feira, 18 de março de 2008 11:06
  • Obrigado Bruno, deu certo !

     

    Eu não sabia dessa linha: dim q as IQueriable(Of TabelaReg)

    T+

     

    terça-feira, 18 de março de 2008 13:52
  • 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
    terça-feira, 18 de março de 2008 15:16