none
Como trabalhar com EntityColletion RRS feed

  • Pergunta

  • Olá.

    No meu projeto eu tenho uma entidade que possui um EntityColletion e eu quero filtrar essa coleção.

    Por exemplo, faço um LINQ que traz um cliente, e nesse cliente eu tenho um EntityColletion com todos os pedidos do cliente. Quero filtrar alguns pedidos, isso é possível?

    Obrigado.

    Marcos Aguiar Jr - Brazil
    quinta-feira, 5 de novembro de 2009 18:41

Respostas

  • Marcos,

    Sim, é possivel.

    Você pode fazer desta maneira:

    var cliente = (from c in MeuDomainEntity.Clientes.Include("Pedidos")
                        where c.Id == 1
                        select c).FirstOrDefault();
    
    //Agora filtrando os pedidos
    var pedidosFiltrados = from p in cliente.Pedidos
                                     where p.Valor > 100
                                     select p;

    Se ajudar não se esqueça de marcar como resposta.
    Epero ter ajudado. Qualquer dúvida favor entrar em contato.
    Douglas Aguiar
    MCAD, MCT
    sexta-feira, 6 de novembro de 2009 11:04
  • Marcos,

    Você pode fazer da seguinte maneira:

    var clientes = from p in MeuDomainEntity.Pedidos
                         where p.Cliente.CIDADE.CD_CODIGOCIDADE == 1 && p.Valor > 100
                         group p by p.Cliente into c
                         select c;

    A clausula groupby deve ajuda-lo, noa testei a query, me avise se der algum problema.

    Veja este link sobre groupby e sobre linq:
    http://msdn.microsoft.com/en-us/vcsharp/aa336754.aspx#simple1
    http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

    Se ajudar não se esqueça de marcar como resposta.
    Epero ter ajudado. Qualquer dúvida favor entrar em contato.
    Douglas Aguiar
    MCAD, MCT
    sexta-feira, 6 de novembro de 2009 18:16

Todas as Respostas

  • Marcos,

    Sim, é possivel.

    Você pode fazer desta maneira:

    var cliente = (from c in MeuDomainEntity.Clientes.Include("Pedidos")
                        where c.Id == 1
                        select c).FirstOrDefault();
    
    //Agora filtrando os pedidos
    var pedidosFiltrados = from p in cliente.Pedidos
                                     where p.Valor > 100
                                     select p;

    Se ajudar não se esqueça de marcar como resposta.
    Epero ter ajudado. Qualquer dúvida favor entrar em contato.
    Douglas Aguiar
    MCAD, MCT
    sexta-feira, 6 de novembro de 2009 11:04
  • Olá Douglas, obrigado pela resposta.

    Sua solução é muito boa, porém imagine a seguinte situação.

    var varCliente = (from c in MeuDomainEntity.Clientes.Include("Pedidos")
                            where c.CIDADE.CD_CODIGOCIDADE == 1
                            select c).FirstOrDefault();
    

    Agora eu tenho um objeto varCliente com todos os clientes da cidade 1 e com seus pedidos relacionados.

    Suponha agora que desses clientes eu só quero pegar os clientes que já fizeram um Pedido com um valor acima de 100 reais, veja não me importa o pedido como informação.

    Entendeu a situação?

    Obrigado.

    Marcos Aguiar Jr - Brazil
    sexta-feira, 6 de novembro de 2009 15:11
  • Marcos,

    Você pode fazer da seguinte maneira:

    var clientes = from p in MeuDomainEntity.Pedidos
                         where p.Cliente.CIDADE.CD_CODIGOCIDADE == 1 && p.Valor > 100
                         group p by p.Cliente into c
                         select c;

    A clausula groupby deve ajuda-lo, noa testei a query, me avise se der algum problema.

    Veja este link sobre groupby e sobre linq:
    http://msdn.microsoft.com/en-us/vcsharp/aa336754.aspx#simple1
    http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

    Se ajudar não se esqueça de marcar como resposta.
    Epero ter ajudado. Qualquer dúvida favor entrar em contato.
    Douglas Aguiar
    MCAD, MCT
    sexta-feira, 6 de novembro de 2009 18:16