none
Subquery Lambda Expression RRS feed

  • Pergunta

  • Boa tarde , estou tentando fazer uma subquery, mas infelizmente não estou conseguindo.

    segue o codigo:

    return
                            bd.CLIENTE.Where(
                                x => !x.CODIGO.ToString().Any(bd.ACOMPANHAMENTO.Select(v => v.CODIGO_CLIENTE))).ToList();

    Obrigado.

    quinta-feira, 24 de setembro de 2015 14:40

Respostas

  • Utilize então not exists

    //NOT EXISTS 
                    //var SelectNotExists = Db.TbAs 
                    //    .AsNoTracking() 
                    //    .Where(x => !Db.TbBs.Select(a => a.Id).Contains(x.Id)) 
                    //    .AsQueryable(); 

    No link que te passei tem vários tipos, eu usaria esse então ... que ai é um SQL só!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta _Manigold_ quinta-feira, 24 de setembro de 2015 16:44
    quinta-feira, 24 de setembro de 2015 16:27

Todas as Respostas

  • Boa tarde , estou tentando fazer uma subquery, mas infelizmente não estou conseguindo.

    segue o codigo:

    return
                            bd.CLIENTE.Where(
                                x => !x.CODIGO.ToString().Any(bd.ACOMPANHAMENTO.Select(v => v.CODIGO_CLIENTE))).ToList();

    Obrigado.

    Coloque as duas entidades aqui no fórum e o que você deseja fazer, assim ficamos mais na duvida do que podemos resolver o seu problema!

    Então

    As duas Entidades (elas se relacionam) ?
    O que é para trazer de sua base de dados ?

    Seja bem especifico ao deixar uma pergunta (todos os detalhes)!!!

    Observação: Só lembrando que ToString() não pode ser usado em Linq dessa forma


    Fulvio Cezar Canducci Dias



    quinta-feira, 24 de setembro de 2015 15:02
  • Olá Fúlvio tudo blz ?

    Tenho as seguintes tabelas

    CLIENTE

    ACOMPANHAMENTO

    Quero transformar essa subquery abaixo em lambda.

    select * from CLIENTE where CODIGO not in(select CODIGO_CLIENTE from ACOMPANHAMENTO)

    Muito obrigado.


    • Editado _Manigold_ quinta-feira, 24 de setembro de 2015 15:45
    quinta-feira, 24 de setembro de 2015 15:44
  • Um bom estudo seria nesse Exemplo de Código que eu disponibilizo aqui!

    https://code.msdn.microsoft.com/Entity-Framework-SELECT-79fd0cf6

    Tem também meu video sobre isso que está no youtube nesse link: https://www.youtube.com/watch?v=H-biZ8Cro1M ( só peço desculpa porque eu falo a pronuncia do Entity errado)

    Código exemplo 

    Lista é os itens que eu quero dar um not in e SeectNoIn é o que não contem aquela lista!

    NOT IN 
    ICollection<int> Lista = Db.TbBs 
      .AsNoTracking() 
      .Select(x => x.Id).ToList<int>();
    
    var SelectNotIn = Db.TbAs 
        .AsNoTracking() 
        .Where(x => !Lista.Contains(x.Id)) 
        .AsQueryable(); 
    
    var GeracaoTNotIn = SelectNotIn.ToList(); 


    Fulvio Cezar Canducci Dias


    quinta-feira, 24 de setembro de 2015 16:18
  • Fúlvio não existe uma maneira mais inteligente de not in ?

    Pois dessa forma se faz necessário criar duas coleções de dados.

    Muito obrigado.

    quinta-feira, 24 de setembro de 2015 16:21
  • Utilize então not exists

    //NOT EXISTS 
                    //var SelectNotExists = Db.TbAs 
                    //    .AsNoTracking() 
                    //    .Where(x => !Db.TbBs.Select(a => a.Id).Contains(x.Id)) 
                    //    .AsQueryable(); 

    No link que te passei tem vários tipos, eu usaria esse então ... que ai é um SQL só!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta _Manigold_ quinta-feira, 24 de setembro de 2015 16:44
    quinta-feira, 24 de setembro de 2015 16:27
  • Aee agora foi, vou postar o codigo:

      return bd.CLIENTE
                               .AsNoTracking()
                               .Where(x => !bd.ACOMPANHAMENTO.Select(a => a.CODIGO_CLIENTE).Contains(x.CODIGO)).ToList()
                               .Select(
                               dados => new ClienteMod()
                               {

                                   Codigo = dados.CODIGO,
                                   Nome = dados.DS_NOME,
                                   Celular = dados.DS_CELULAR,
                                   Email = dados.DS_EMAIL

                               }
                           ).ToList();

    quinta-feira, 24 de setembro de 2015 16:42