none
Query para retornar registro relacionados RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho uma tabela de produto e outro de preço, sendo que a relação é de 1 para muitos.

    Quando executo (from p in db.produto where p.codigo == codigo select p ) é retornado um um objeto produto.

    Como faço para retornar somente um registro da tabela preço passando como filtro uma data ?


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 01:08

Respostas

  • Leandro,

     

    Tenta assim...

    var consulta = from pr in preco
            join p in produto on pr equals pr.produto into precoProduto
            where pr.Data <= DateTime.Now && p.codigoProduto == codigoProduto
            select new { Produto = p, ListaPreco = precoProduto };
    

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 13:30

Todas as Respostas

  • Leandro,

     

    Você pode fazer assim...

    var data = Datetime.Now;
    
    var produto = db.produto.First(p => p.campodata == data);
    

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 01:33
  • Olá Ricardo,

    O campo data não esta na tabela produto, esta na tabela preco.

    se utilizar produto.preco.toList() ai tenho uma lista com todos os preço.

    Gostaria de através do objeto produto acessar o objeto preco com somente um resultado.


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 01:38
  • Isso mesmo, tente no lugar de .ToList(), coloque .First(p => p.campodata == data);

     

    Ele irá retorna apenas o primeiro registro que atender a condição...

     

    Abraço,



    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 01:43
  • Olá Ricardo,

    Fiz assim ProdutoPreco pp = produto.ProdutoPreco.First(p => p.DataPreco <= DateTime.Now)

    Como devo fazer para colocar um orderby  ?


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 01:53
  • Leandro,

     

    Correto!

     

    Não entendi o porque do orderby, sendo que neste caso você está retornando um único registro (first)...

     

    Para retorna um lista de preço com data menores ou iguais a data atual, faça assim:

    var lista = from p in db.produto.ProdutoPreco 
            where p.DataPreco <= DateTime.Now
            select p;
    

     

    Entendeu?

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 01:59
  • Gostaria de retornar somente o objeto produto e dentro do objeto produto conseguir acessar o objeto preço.

     

     


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 02:03
  • Leandro,

     

    Vamos ver se eu entendi...

    Você tem uma tabela Produto, que contém os atributos Preco e Data. Então quer retorna apenas o campo Preco de uma lista de Produto, filtrado pelo campo Data.

    Correto?

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 02:23
  • Tenho duas tabelas, a tabela produto e tabela preço. Para cada registro de produto pode existir varios registro de preço.

    Gostaria de retornar um objeto produto e dentro do objeto produto as infomações de somente um registro da tabela preço.


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 04:22
  • Olá Leandro,
    Você pode tentar algo mais ou menos assim

    var result = (from produto in db.Produto
              join preco in db.Preco on produto.IdProduto equals preco.IdProduto
              where preco.Data == data
              select produto).First();
    
    

    Att.
    Anderson

    quinta-feira, 19 de agosto de 2010 10:59
  • Anderson,

    Fiz este teste, mas somente retorna o objeto produto, quando tento acessar o objeto preco desta forma produto.preco as propriedades do objeto preco não ficam disponiveis.


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 11:47
  • Entendi ...

    Da maneira a seguir, o preco não estará dentro do produto, mas provavelmente vc terá um de cada

    var result = (from produto in db.Produto
              join preco in db.Preco on produto.IdProduto equals preco.IdProduto
              where preco.Data == data
              select new
              {
                  Produto = produto,
                  Preco = preco
              }
     ).First();

    Att.
    Anderson

    quinta-feira, 19 de agosto de 2010 13:22
  • Leandro,

     

    Tenta assim...

    var consulta = from pr in preco
            join p in produto on pr equals pr.produto into precoProduto
            where pr.Data <= DateTime.Now && p.codigoProduto == codigoProduto
            select new { Produto = p, ListaPreco = precoProduto };
    

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quinta-feira, 19 de agosto de 2010 13:30
  • Olá Ricardo,

    Agora funcionou, tenho consulta.produto e consulta.precoProduto

    Obrigado.


    Aprendendo C#, Asp.Net, Sql Server
    quinta-feira, 19 de agosto de 2010 22:48
  • Por nada!

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    sexta-feira, 20 de agosto de 2010 01:18