none
Query complexa ad.net entity framework RRS feed

  • Pergunta


  • Galera, sou usuario do nhibernate/hibernate e la faço muitas queries complexas, com exists, subqueries, etc...

    Como fazer isso na versão do ado.net entity?

    como seria as querys abaixo(apenas como exemplo)?

    1)

    select pedido.* from pedidos as pedido 
    inner join produtos as prod
       on prod.id = pedido .produtoId
    where prod.nome = @nome
       or pedido .valor > @valor


    no hibernate seria:
    select pedido from pedidos pedido
    inner join pedido.produtos as prod
    where prod.nome = @nome
       or pedido .valor > @valor

    2)

    select pedido.* from pedidos as pedido 
    where exists (
      select prod .* produtos as prod
      where prod.Id = pedido.produtoId
    )


    no hibernate seria:
    select pedido from pedidos pedido 
    where exists (
      select prod produtos prod
      inner join prod.pedidos pedido
      where prod.pedido = pedido
    )



    Antonio Kuroki
    segunda-feira, 7 de dezembro de 2009 14:44

Todas as Respostas

  • Antônio,

    Desculpe a demora para a resposta, mas vamos lá:

    no c# ficaria mais ou menos assim:

    select pedido.* from pedidos as pedido 
    inner join produtos as prod
       on prod.id = pedido .produtoId
    where prod.nome = @nome
       or pedido .valor > @valor

    string nomeProduto = "";

    double valorPedido = 102.00;

    var

     

    pedidosFeitos = from ped in pedidos

     

    join pro in produtos on ped.Produto.ID equals pro.ID

     

    where pro.Nome == nomeProduto

    && ped.Total > valorPedido

     

    select ped

    2) Para esta segue o código também:

    select pedido from pedidos pedido 
    where exists (
      select prod produtos prod
      inner join prod.pedidos pedido
      where prod.pedido = pedido

    Suponha que vocês já tenha a listas preenchida, ficaria assim:

    var pedidosExistente = pedidos.Where(p => p.Pedido.ID = codigoPedido).ToList()

    if(pedidos.Count > 0){

    }

    ou ainda;

     if(pedidos.Any(p => p.Pedido.ID = codigoPedido)){

    }

    Espero ter ajudado.

     

    quarta-feira, 2 de junho de 2010 15:50
  • Antonio.

    1)

    select pedido.* from pedidos as pedido 
    inner join produtos as prod
       on prod.id = pedido .produtoId
    where prod.nome = @nome
       or pedido .valor > @valor

    Entity Framework

    List<pedido> pedidos = (from tPed in entidade.pedidos join tProd in entidade.produtos on tPed.produtoId equals tProd.id where tProd.nome == @nome || tPed.valor > @valor select tPed).ToList();

    2)

    select pedido.* from pedidos as pedido 
    where exists (
      select prod .* produtos as prod
      where prod.Id = pedido.produtoId

    Entity FrameWork

    List<pedido> pedido = (from tPed in entidade.pedidos where (from tProd in entidade.produtos where tProd.Id == tPed.produtoId select tProd ).Contains(tPed.produtos) select tPed).ToList();

    Obs: a palavra "entidade" é o nome de sua conexão do modelo de relacionamento do Entity Framework.
    tProd = Você também pode compara direto valore ex: tProd.Id).Contains(tPed.produtoId)

    Espero ter ajudado, caso a resposta tenha solucionado seu problema, favor marcar como resposta, obrigado.

     

     

    quinta-feira, 3 de junho de 2010 02:58
  • Olá Ridley

    Eu li um artigo estes dias falando que o Entity Framework não suporta a função contains() ou este artigo estava equivocado?

    sexta-feira, 18 de fevereiro de 2011 11:55
  • Na realidade as consultas que realizamos dentro no Entity Framework através de C# ou Visual Basic é através do Linq to Entity, respondendo sua pergunta na versão do Framework 4 a função Contains é suportada sim pelo Linq to Entity.
    sexta-feira, 5 de agosto de 2011 12:35