Usuário com melhor resposta
Senhores, uma ajuda no Linq

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.NOMEFANTASIAComo 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?
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/- Marcado como Resposta Ricardo Soares Nogueira segunda-feira, 27 de maio de 2013 13:50
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/ -
-
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/- Sugerido como Resposta Samuel Rodrigues dos Anjos quarta-feira, 1 de maio de 2013 00:30
-
-
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çoVitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/ -
-
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/- Marcado como Resposta Ricardo Soares Nogueira segunda-feira, 27 de maio de 2013 13:50