none
Como fazer essa Consulta RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma Tabela Clientes(clienteID, Nome, etc..) e uma Tabela TeleMarketing(Teleid, ClienteID, Data, descri, etc...).

    Para Preecher o ComboClientes uso:

     Dim Resultado = From p In Ctx.ClientesSet.ToList Order By p.NomeCliente Ascending

    Gostaria de fazer alguns filtros, mas não sei como fazer: Filtrar os clientes que nunca tenham recebido contato e os clientes que fazem x dias que não recebem contato.

    Desde ja muito Obrigado!

    sexta-feira, 1 de junho de 2012 20:06

Respostas

  • Olá Gusta24131,

    Acho que isso pode ajudar:

    ' Filtrar os clientes que nunca tenham recebido contato
    Dim query1 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Into result _
    	     From mix In result.DefaultIfEmpty() 
    	     Where mix Is Nothing
    	     Select cli;
    
    ' Filtra clientes que fazem x dias que não recebem contato
    Dim query2 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Where tel.Data < VariavelData
    	     Select cli;

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sábado, 2 de junho de 2012 00:23
    Moderador
  • Consegui!!!! Fernando Valeu pela luz!!!

    Segue Solução:

    Dim q = From e In Ctx.ClientesSet _
                        Group Join o In Ctx.TeleMarketingSet On e Equals o.Clientes Into ords = Group _
                        From o In ords.DefaultIfEmpty Where o Is Nothing _
                        Select New With {e.ClienteId, e.NomeCliente, .Order = o}

    segunda-feira, 4 de junho de 2012 20:22
  • Ah! Saquei... não é nem um problema da Query. O caso é que vc realmente tem 5 clientes...

    Use o Distinct, ele irá resolver o problema.

    Dim query2 = (From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Where tel.Data < VariavelData
    	     Select cli).Distinct()

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Gusta24131 quarta-feira, 13 de junho de 2012 17:57
    quarta-feira, 13 de junho de 2012 17:25
    Moderador

Todas as Respostas

  • Tenta isso:

    From p In Ctx.ClientesSet.ToList

    where !TeleMarketing.Select(t => t.ClienteId).Contains(p.ClienteId)

    Order By p.NomeCliente Ascending

    select p;


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze sexta-feira, 1 de junho de 2012 20:25
    sexta-feira, 1 de junho de 2012 20:24
  • Olá Gusta24131,

    Acho que isso pode ajudar:

    ' Filtrar os clientes que nunca tenham recebido contato
    Dim query1 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Into result _
    	     From mix In result.DefaultIfEmpty() 
    	     Where mix Is Nothing
    	     Select cli;
    
    ' Filtra clientes que fazem x dias que não recebem contato
    Dim query2 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Where tel.Data < VariavelData
    	     Select cli;

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sábado, 2 de junho de 2012 00:23
    Moderador
  • Fernando,

    A query2 Perfeito!! Mas na Query1 não estou conseguindo. o Erro é apartir do INTO. 

    obs:Uso o VB2010 e ef4.3

    segunda-feira, 4 de junho de 2012 13:35
  • Fernando,

    A query2 Perfeito!! Mas na Query1 não estou conseguindo. o Erro é apartir do INTO. 

    obs:Uso o VB2010 e ef4.3


    segunda-feira, 4 de junho de 2012 13:43
  • Murilo,

    Encontrei alguma dificuldade na sua resposta. segue print screen para ver o erro.

    Obrigado

    segunda-feira, 4 de junho de 2012 13:44
  • Olá Gusta,

    A Query 1 corrigida acredito que deva ficar algo como:

    Dim query1 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Into result _
    	     From tel In result.DefaultIfEmpty() 
    	     Where tel Is Nothing
    	     Select cli;
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    segunda-feira, 4 de junho de 2012 16:41
    Moderador
  • Fernando,

    Mesmo Erro. No intellisense não existe o INTO. Pode ser alguma referencia que esteja faltando?

     

    segunda-feira, 4 de junho de 2012 17:35
  • Fernando,

    Mesmo Erro. No intellisense não existe o INTO. Pode ser alguma referencia que esteja faltando?

    Dessa Forma Consigo Realizar a Consulta, porem Retorna sempre em branco:

     Dim query1 = From cli In Ctx.ClientesSet Join tel In Ctx.TeleMarketingSet On cli.ClienteId Equals _
                                    tel.ClienteClienteId Where (tel Is Nothing) Select cli.ClienteId, cli.NomeCliente

    segunda-feira, 4 de junho de 2012 18:24
  • Consegui!!!! Fernando Valeu pela luz!!!

    Segue Solução:

    Dim q = From e In Ctx.ClientesSet _
                        Group Join o In Ctx.TeleMarketingSet On e Equals o.Clientes Into ords = Group _
                        From o In ords.DefaultIfEmpty Where o Is Nothing _
                        Select New With {e.ClienteId, e.NomeCliente, .Order = o}

    segunda-feira, 4 de junho de 2012 20:22
  • Fernando,

    Na consulta que voce me passou para retornar < variaveldata esta funcionando, Porem se o cliente tem 5 registros na tabela teleMarketing ele exibe o cliente as 5x. Como Poderia exibir somente uma vez esse cliente?

    quarta-feira, 13 de junho de 2012 16:57
  • Olá Gusta,

    Chegou a testar assim?

    Dim q = From e In Ctx.ClientesSet _
                        Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId Into ords _
                        From o In ords.DefaultIfEmpty Where o Is Nothing _
                        Select New With {e.ClienteId, e.NomeCliente, .Order = o}

    O problema esta na parte que vc faz:

    On e Equals o.Clientes


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quarta-feira, 13 de junho de 2012 17:04
    Moderador
  • Essa query ta ok. A que esta me gerando duplicidade é essa:

    Dim query2 = From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Where tel.Data < VariavelData
    	     Select cli;

    Seria o caso de substituir o equals por contains ?
    quarta-feira, 13 de junho de 2012 17:15
  • Ah! Saquei... não é nem um problema da Query. O caso é que vc realmente tem 5 clientes...

    Use o Distinct, ele irá resolver o problema.

    Dim query2 = (From cli In Ctx.ClientesSet _
    	     Join tel In Ctx.TeleMarketing On cli.ClienteId equals tel.ClienteId _ 
    	     Where tel.Data < VariavelData
    	     Select cli).Distinct()

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Gusta24131 quarta-feira, 13 de junho de 2012 17:57
    quarta-feira, 13 de junho de 2012 17:25
    Moderador
  • Perfeito!!! muito Obrigado!!!
    quarta-feira, 13 de junho de 2012 17:57