Array
(
)

LINQ To DataSet

Renato
|
MVP
Pontos: 1000
    01 set 2014

Alguém pode me ajudar a transformar uma stored procedure em linq por favor?
Stored Procedure
#Código

SELECT   
	   Planilha.num_contrato,
       Planilha.num_servico,
       Planilha.escritorio,
       Planilha.area_telefonica,
       Planilha.servico_tipo,
       Planilha.servico_subtipo,
       Planilha.data_geracao,
       Planilha.ordem_interna,
       Planilha.boletim_anormalidade,
       Planilha.plano_trabalho,
       Planilha_Um.ata_estudo_num,
       Planilha_Um.ata_estudo_inicio,
       Planilha_Um.ata_estudo_fim,
       Planilha_Um.ata_estudo_comeco,
       Planilha_Um.ata_estudo_conclusao,
       Planilha_Dois.medicao_num,
       Planilha_Dois.medicao_data_criacao,
       SUM(Planilha_Dois.medicao_valor_pagar) AS Valor_Pagar,
       Planilha_Dois.medicao_acesso_atividade,
       Planilha_Dois.medicao_data_classificacao
      
FROM Servico_Arquivo Planilha
INNER JOIN Servico_Arquivo_Um Planilha_Um ON 
Planilha.num_contrato = Planilha_Um.num_contrato AND Planilha.num_servico = Planilha_Um.num_servico
INNER JOIN Servico_Arquivo_Dois Planilha_Dois ON 
Planilha.num_contrato = Planilha_Dois.num_contrato AND Planilha.num_servico = Planilha_Dois.num_servico

GROUP BY 
       Planilha.num_contrato,
       Planilha.num_servico,
       Planilha.escritorio,
       Planilha.area_telefonica,
       Planilha.servico_tipo,
       Planilha.servico_subtipo,
       Planilha.data_geracao,
       Planilha.ordem_interna,
       Planilha.boletim_anormalidade,
       Planilha.plano_trabalho,
       Planilha_Um.ata_estudo_num,
       Planilha_Um.ata_estudo_inicio,
       Planilha_Um.ata_estudo_fim,
       Planilha_Um.ata_estudo_comeco,
       Planilha_Um.ata_estudo_conclusao,
       Planilha_Dois.medicao_num,
       Planilha_Dois.medicao_data_criacao,
       Planilha_Dois.medicao_acesso_atividade,
       Planilha_Dois.medicao_data_classificacao
       
UNION

SELECT   
	   Planilha.num_contrato,
       Planilha.num_servico,
       Planilha.escritorio,
       Planilha.area_telefonica,
       Planilha.servico_tipo,
       Planilha.servico_subtipo,
       Planilha.data_geracao,
       Planilha.ordem_interna,
       Planilha.boletim_anormalidade,
       Planilha.plano_trabalho,
       Planilha_Um.ata_estudo_num,
       Planilha_Um.ata_estudo_inicio,
       Planilha_Um.ata_estudo_fim,
       Planilha_Um.ata_estudo_comeco,
       Planilha_Um.ata_estudo_conclusao,
       NULL AS medicao_num,
       NULL AS medicao_data_criacao,
       NULL AS medicao_acesso_atividade,
       NULL AS medicao_data_classificacao,
       NULL AS medicao_valor_pagar
FROM Servico_Arquivo Planilha
INNER JOIN Servico_Arquivo_Um Planilha_Um ON 
Planilha.num_contrato = Planilha_Um.num_contrato AND Planilha.num_servico = Planilha_Um.num_servico


GROUP BY 
       Planilha.num_contrato,
       Planilha.num_servico,
       Planilha.escritorio,
       Planilha.area_telefonica,
       Planilha.servico_tipo,
       Planilha.servico_subtipo,
       Planilha.data_geracao,
       Planilha.ordem_interna,
       Planilha.boletim_anormalidade,
       Planilha.plano_trabalho,
       Planilha_Um.ata_estudo_num,
       Planilha_Um.ata_estudo_inicio,
       Planilha_Um.ata_estudo_fim,
       Planilha_Um.ata_estudo_comeco,
       Planilha_Um.ata_estudo_conclusao
END

LINQ (até o momento)
#Código
var servico = ds.Tables[0].AsEnumerable();
            var ata = ds.Tables[1].AsEnumerable();
            var medicao = ds.Tables[2].AsEnumerable();

            var results = from Servico in servico
                          join Ata in ata.AsEnumerable() on new { num_contrato = (string)Servico["num_contrato"], num_ordem = (string)Servico["num_servico"] } 
                          equals new { num_contrato = (string)Ata["num_contrato"], num_ordem = (string)Ata["num_servico"] }
                          join Medicao in medicao.AsEnumerable() on new { num_contrato = (string)Servico["num_contrato"], num_ordem = (string)Servico["num_servico"] } 
                          equals new { num_contrato = (string)Medicao["num_contrato"], num_ordem = (string)Medicao["num_servico"] }
                          group new { Servico, Ata, Medicao } by new
                          {
                              num_contrato = Servico.Field<string>("num_contrato"),
                              num_servico = Servico.Field<string>("num_servico"),
                              escritorio = Servico.Field<string>("escritorio"),
                              area_telefonica = Servico.Field<string>("area_telefonica"),
                              servico_tipo = Servico.Field<string>("serivo_tipo"),
                              servico_subtipo = Servico.Field<string>("serivo_subtipo"),
                              data_geracao = Servico.Field<DateTime>("data_geracao").ToString(),
                              ordem_interna = Servico.Field<string>("ordem_interna"),
                              boletim_anormalidade = Servico.Field<string>("boletim_anormalidade"),
                              plano_trabalho = Servico.Field<string>("plano_trabalho"),
                              aep_num = Ata.Field<string>("ata_estudo_num"),
                              aep_inicio = Ata.Field<DateTime>("ata_estudo_inicio").ToString(),
                              aep_fim = Ata.Field<DateTime>("ata_estudo_fim"),
                              aep_comeco = Ata.Field<DateTime>("ata_estudo_comeco"),
                              aep_conclusao = Ata.Field<DateTime>("ata_estudo_conclusao"),
                              medicao_num = Medicao.Field<string>("medicao_num"),
                              medicao_data_criacao = Medicao.Field<DateTime>("medicao_data_criacao").ToString(),
                              medicao_acesso_atividade = Medicao.Field<string>("medicao_acesso_atividade"),
                              medicao_data_classificao = Medicao.Field<DateTime>("medicao_data_classificao")
                          } into GM

                          select new
                          {
                              num_contrato = GM.Key.num_contrato,
                              num_servico = GM.Key.num_servico,
                              escritorio = GM.Key.escritorio,
                              area_telefonica = GM.Key.area_telefonica,
                              serivo_tipo = GM.Key.servico_tipo,
                              serivo_subtipo = GM.Key.servico_subtipo,
                              data_geracao = GM.Key.data_geracao,
                              ordem_interna = GM.Key.ordem_interna,
                              boletim_anormalidade = GM.Key.boletim_anormalidade,
                              plano_trabalho = GM.Key.plano_trabalho,
                              aep_num = GM.Key.aep_num,
                              aep_inicio = GM.Key.aep_inicio,
                              aep_fim = GM.Key.aep_fim,
                              aep_comeco = GM.Key.aep_comeco,
                              aep_conclusao = GM.Key.aep_conclusao,
                              medicao_num = GM.Key.medicao_num,
                              medicao_valor = GM.Sum(valor => valor.Medicao.Field<Decimal>("medicao_valor_pagar")),
                              medicao_data_criacao = GM.Key.medicao_data_criacao,
                              medicao_acesso_atividade = GM.Key.medicao_acesso_atividade,
                              medicao_data_classificao = GM.Key.medicao_data_classificao
                          };

Gostaria de saber se o caminho é esse mesmo para e como fazer para que a query results retorne um DataTable?
Obrigado

Renato
|
MVP
Pontos: 1000
    02 set 2014

Resolvido.

0
|
0