private static void compararGabineteDoacoes() { Console.WriteLine("Abrindo bancos"); SqliteDB dbGabinete = new SqliteDB("gabinete_camara.db"); SqliteDB dbDoacoes = new SqliteDB("doacoes_2020.db"); Console.WriteLine("Selecionando doadores"); var modelDoacoes = dbDoacoes.ExecuteQuery <Robops.Lib.TSE.Contas.ReceitasModel>("SELECT * FROM ReceitasModel WHERE length(DocumentoDoador) = 11 ", null) .Where(o => o.Ano == 2020) .OrderBy(o => o.NomeDoadorRFB) .ToArray(); Console.WriteLine("Selecionando pessoal"); var gabinete = dbGabinete.GetAll <PessoalModel>() .ToArray(); var hashNomesGabinete = gabinete.Select(o => o.NomeFuncionario.ToUpper()) .ToHashSet(); var deputados = dbGabinete.GetAll <Robops.Lib.Camara.Leg.Deputado>() .ToDictionary(d => d.Id); Console.WriteLine("Executando busca"); foreach (var doador in modelDoacoes) { if (!hashNomesGabinete.Contains(doador.NomeDoadorRFB.ToUpper())) { continue; } var gab = gabinete.First(g => g.NomeFuncionario.ToUpper() == doador.NomeDoadorRFB.ToUpper()); // ele pode doar para si mesmo if (gab.NomeFuncionario.ToUpper() == doador.NomeCandidato.ToUpper()) { continue; } string fileName = "doadores.csv"; var deputado = deputados[gab.IdDeputado]; if (deputado.NomeCivil.ToUpper() == doador.NomeCandidato.ToUpper()) { fileName = "doadores_pingPong.csv"; } else { fileName = "doadores_gramaVizinho.csv"; } string text = $"{doador.NomeDoadorRFB.ToUpper()};{gab.NomeDeputado.ToUpper()};{deputado.PartidoLideranca};{doador.NomeCandidato.ToUpper()};{doador.NumeroCandidato};{gab.InicioExercicio:d} - {gab.FimExercicio:d}\r\n"; Console.WriteLine(text); File.AppendAllText(fileName, text); } }