none
Converter SQL para o LINQ RRS feed

  • Pergunta

  • Como converter a consulta SQL abaixo para LINQ.

    O código roda 100%.

    Eu tentei converter com Linqer SQL to LINQ converter, mas retorna com a mensagem

    "SQL cannot be converted to LINQ: Table [Media] not found in the current Data Context."

    ;with 
    	   IdadeCasos as (
    SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade
      from OJ_Prod_AARH as C inner join
           ag_Soc_PF as B on B.id = C.cod_pf
      --where ...
    ),
    AnoaAno as (
    SELECT AnoCaso,
           FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end),
           FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end),
           FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end),
           FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end)
      from IdadeCasos
      group by AnoCaso
    ),
    MediaC as (
    SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2, 
           avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4
      from AnoaAno
    ),
    Media as (
    SELECT FxE, Casos
      from MediaC
      unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U
    ),
    PopFxE as (
    select
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end as FaixaEtaria,
        sum(POPULACAO) as Populacao
    from POPBR10
    Where MUNIC_RES=411850
    group by
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end
    )
    SELECT case M.FxE when 'FxEtaria1' then 'Crianças'
                      when 'FxEtaria2' then 'Adolescentes'
                      when 'FxEtaria3' then 'Adultos'
                      when 'FxEtaria4' then 'Terceira idade' end as [GRUPO ETÁRIO], 
           cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa (casos por 1.000 hab.)]
           --, M.Casos, P.Populacao
      from Media as M inner join
           PopFxE as P on P.FaixaEtaria = M.FxE 
      order by M.FxE;

    quinta-feira, 27 de fevereiro de 2014 20:31

Todas as Respostas

  • Você quer fazer um Join Case em uma Query?

    Olha este exemplo de Join

    var query = (from p in people
                 join pts in pets on p equals pts.Owner
                 select p).Distinct();

    E aqui de Select:

    from u in users
    let range = (u.Age >= 0  && u.Age < 10 ? "0-25" :
                 u.Age >= 10 && u.Age < 15 ? "26-40" :
                 u.Age >= 15 && u.Age < 50 ? "60-100" :
                "50+")
    group u by range into g
    select new { g.Key, Count=g.Count() };

    Outro

    var query = from grade in sc.StudentGrade
                            join student in sc.Person on grade.Person.PersonID
                                          equals student.PersonID
                            select new
                            {
                                FirstName = student.FirstName,
                                LastName = student.LastName,
                                Grade = grade.Grade.Value >= 4 ? "A" :
                                            grade.Grade.Value >= 3 ? "B" :
                                            grade.Grade.Value >= 2 ? "C" :
                                            grade.Grade.Value != null ? "D" : "-"
                            }; 

    Da uma olhada se estes exemplos podem lhe ajudar.


    Paulo Marcelo Dalbosco

    quinta-feira, 27 de fevereiro de 2014 21:13