Bom dia,

gostaria de saber como posso "escrever" essa expressão SQL em LINQ ou Lambda:

SELECT a.PhoneId, COUNT(a.PhoneId), c.Name, cp.DDD, cp.Number
FROM (
SELECT rp.PhoneId, rp.DateSend FROM ReportSMS_Phones rp WHERE rp.CodReturned IN ('016', '015', '012', '005', 'IB:5')
AND NOT EXISTS (
SELECT rp2.PhoneId FROM ReportSMS_Phones rp2 WHERE rp2.PhoneId = rp.PhoneId AND rp2.DateSend > rp.DateSend AND rp2.CodReturned NOT IN ('016', '015', '012', '005', 'IB:5')
)
) a
INNER JOIN Clients c, Clients_Phones cp
WHERE cp.ClientId = c.Id AND cp.Id = a.PhoneId
GROUP BY a.PhoneId

Desde já, grato pela atenção.

Exibições: 696

Respostas a este tópico

Consegui fazer o seguinte:

var query = from rp in
                        (
                           from rpAux in db.ReportSMS_Phones
                           where
                              rpAux.CodReturned == "016" ||
                              rpAux.CodReturned == "015" ||
                              rpAux.CodReturned == "012" ||
                              rpAux.CodReturned == "005" ||
                              rpAux.CodReturned == "IB:5"
                           && (
                              from rpAux2 in db.ReportSMS_Phones
                              where
                                 rpAux.PhoneId == rpAux2.PhoneId &&
                                 rpAux2.DateSend > rpAux.DateSend &&
                                 rpAux2.CodReturned != "016" &&
                                 rpAux2.CodReturned != "015" &&
                                 rpAux2.CodReturned != "012" &&
                                 rpAux2.CodReturned != "005" &&
                                 rpAux2.CodReturned != "IB:5"
                              select new { rpAux2 }
                              ).Count() == 0
                           select new { rpAux }
                        )
                  group rp by rp.rpAux into g
                  select new ReportSMS_PhonesViewModel { Phone = g.Key.Clients_Phones, Count = g.Count(r => r.rpAux.PhoneId == g.Key.PhoneId) };
return View(query.ToList());

A consulta está retornando a coleção de dados correta, mas o agrupamento não está funcionando, então estou ficando com dados duplicados e todos os Count com o valor 1. Alguma sugestão?

Como não consegui avançar mais do que isso no código, fiz a "adaptação" abaixo:

var query = from rp in
                        (
                           from rpAux in db.ReportSMS_Phones
                           where
                              rpAux.CodReturned == "016" ||
                              rpAux.CodReturned == "015" ||
                              rpAux.CodReturned == "012" ||
                              rpAux.CodReturned == "005" ||
                              rpAux.CodReturned == "IB:5"
                           && (
                              from rpAux2 in db.ReportSMS_Phones
                              where
                                 rpAux.PhoneId == rpAux2.PhoneId &&
                                 rpAux2.DateSend > rpAux.DateSend &&
                                 rpAux2.CodReturned != "016" &&
                                 rpAux2.CodReturned != "015" &&
                                 rpAux2.CodReturned != "012" &&
                                 rpAux2.CodReturned != "005" &&
                                 rpAux2.CodReturned != "IB:5"
                              select new { rpAux2 } 
                              ).Count() == 0
                           select new { rpAux }
                        )
                  group rp by rp.rpAux into g
                  select new ReportSMS_PhonesViewModel { Phone = g.Key.Clients_Phones, Count = g.Count(r => r.rpAux.PhoneId == g.Key.PhoneId) };

List<ReportSMS_PhonesViewModel> reports = new List<ReportSMS_PhonesViewModel>();
foreach (var rp in query.ToList())
{

    ReportSMS_PhonesViewModel report = reports.FirstOrDefault(r => r.Phone.Id == rp.Phone.Id);
    if (report == null)
    {
        reports.Add(rp);
    }
    else
    {
        rp.Count = report.Count + 1;
        reports.Remove(report);
        reports.Add(rp);
    }
}

return View(reports);

RSS

© 2019   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço