none
Senhores, uma ajuda no Linq RRS feed

  • Pergunta

  • Estava indo tão bem em Linq, quando me deparei com esta consulta abaixo:

    SELECT M.NOMEFANTASIA,
    CASE 
    WHEN PS.idStatus = '119' THEN 'ROTA'
    WHEN PS.idStatus = '120' THEN 'ENTREGUE'
    END AS 'STATUS',
    COUNT(PS.idStatus) AS 'TOTAL'
    FROM OPEDIDOS P
    INNER JOIN OMOTORISTAS M ON M.ID = P.IDMOTORISTA
    INNER JOIN OPEDIDOSSTATUS PS ON PS.IDPEDIDO = P.IDPEDIDO
    WHERE PS.idStatus IN (119,120) AND 
    PS.dataInicio BETWEEN '2001-01-02' AND '2013-10-30'
    GROUP BY M.NOMEFANTASIA,PS.idStatus
    ORDER BY M.NOMEFANTASIA

    Como montaria isso em Linq?

    Cara, tentei de muitas formas, não consigo colocar o Group By e Count ao mesmo tempo, olha como ficou o meu Linq?

     var motoristaPedidos = (from p in db.OPEDIDOs
                                            join m in db.OMOTORISTAs on p.idMotorista equals m.id
                                            join ps in db.OPEDIDOSSTATUS on p.idPedido equals ps.idPedido
                                            where ps.dataInicio > Convert.ToDateTime(data1) && ps.dataInicio < Convert.ToDateTime(data2) 
                                            group new { ps, m } by new { ps.idStatus, m.nomeFantasia } into grp
                                            select new { grp.Key.nomeFantasia, grp.Key.idStatus, Count = grp.Count()});

    Podem me ajudar?

    sexta-feira, 26 de abril de 2013 19:50

Respostas

  • Ricardo,

    De formar automática, infelizmente não existe. O mais próximo que você vai chegar disso é utilizando o SQL to LINQ (http://www.sqltolinq.com/) onde você informar a consulta SQL e ele te retorna o LINQ, porem ele é pago, mas existe um período de avaliação.

    Tente você mesmo montar suas querys e analisar o SQL (como eu sugeri a algumas postagens acima) que o LINQ gerou, praticando você chega a perfeição.

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 30 de abril de 2013 19:56

Todas as Respostas

  • Olá Ricardo,

    Analisando sua query, não consigo ver o erro, porem você também não disse qual erro dispara, talvez você possar usar uma ferramente chamada SQL to LINQ que ajuda nestas conversões de SQL para LINQ.

    Eu apenas notei que na sua clausula WHERE faltou o filtro por status (119,120), sera que é isso ?

    Veja:
    http://www.sqltolinq.com/

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 29 de abril de 2013 14:23
  • Boa tarde Vitor.

    Obrigado pela sua atenção.

    O problema que eu estou tendo é se o Linq está de acordo com a query que eu criei, pode está até funcionando, mais eu queria saber se o Linq criado está de acordo com a query montada.

    Blz?


    terça-feira, 30 de abril de 2013 16:06
  • Ricardo,

    É possível você extrair o SQL executado no banco de dados, para LINQ to SQL faça assim:

    CustomDataContext dc = new CustomDataContext();
    var query =
      from c in dc.Customer
      where c.Country == "UK"
      select c;
    
    //SQL GERADO
    string command = dc.GetCommand(query).CommandText;

    Com o Entity Framework pode ser assim:

    var result = from x in appEntities
                 where x.id = 32
                 select x;
    
    var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 30 de abril de 2013 16:34
  • Vitor , blz?

    Pode me passar um passo a passo como que eu faço esse Sql para Linq?

    Seria uma grande ajuda.

    terça-feira, 30 de abril de 2013 19:02
  • Tudo bem Ricardo, e você 

    Então cara, eu fiquei meio confuso agora, não sei se sua duvida é de como converter um SQL para LINQ ou ver qual foi o SQL gerado pelo LINQ.

    Aproveita a consultoria ai cara, é grátis, pode perguntar rsrsrs

    Um abraço

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 30 de abril de 2013 19:13
  • Oi Vitor.

    Quero converter Sql para Linq de forma automática. 

    Existe isso?

    Abraço.

    terça-feira, 30 de abril de 2013 19:32
  • Ricardo,

    De formar automática, infelizmente não existe. O mais próximo que você vai chegar disso é utilizando o SQL to LINQ (http://www.sqltolinq.com/) onde você informar a consulta SQL e ele te retorna o LINQ, porem ele é pago, mas existe um período de avaliação.

    Tente você mesmo montar suas querys e analisar o SQL (como eu sugeri a algumas postagens acima) que o LINQ gerou, praticando você chega a perfeição.

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 30 de abril de 2013 19:56