public IEnumerable <SenateSession> LoadSessions(string directoryRoot) { List <SenateSession> sessions = new List <SenateSession>(); string path = Path.Combine(directoryRoot, "data"); var congressDirectories = Directory.EnumerateDirectories(path); foreach (var congressDirectory in congressDirectories) { var sessionDirectories = Directory.EnumerateDirectories(congressDirectory); foreach (var sessionDirectory in sessionDirectories) { string summaryFileName = $"{sessionDirectory}/summary.xml"; if (!File.Exists(summaryFileName)) { continue; } using (StreamReader reader = new StreamReader(summaryFileName)) { SenateSession session = (SenateSession)senateSessionSerializer.Deserialize(reader); sessions.Add(session); } } } return(sessions); }
private static void ProcessSession(SenateXmlLoader loader, string path, SenateSession session, string databaseName, string userName, string password) { string connectionString = $"Server=localhost;Database={databaseName};User Id={userName};Password={password};"; using SqlConnection connection = new SqlConnection(connectionString); connection.Open(); int currentSessionId = 0; currentSessionId = InsertCongressionalSession(connection, session.Congress, session.Session, session.Year); IEnumerable <RollCallVote> votes = loader.GetRollCallVotes(path, session.Congress, session.Session) .OrderBy(v => Int32.TryParse(v.VoteNumber, out int voteNum) ? voteNum : -1); var groupedMembers = votes .SelectMany(v => v.Members.MemberElements) .GroupBy(m => m.LisMemberId) .Select(g => g.First()) .Select(m => new KeyValuePair <string, Member>(m.LisMemberId, m)); foreach (var kvpMember in groupedMembers) { InsertSenator(connection, kvpMember.Value); } foreach (RollCallVote vote in votes) { InsertLegislativeItem(connection, currentSessionId, vote); } Dictionary <string, int> legislativeItems = connection.Query <(int Id, int SessionID, string VoteNumber)> ($@" SELECT Id, SessionID, VoteNumber FROM dbo.LegislativeItems WHERE SessionID = @SessionID", new { SessionID = currentSessionId }).ToDictionary(i => i.VoteNumber, i => i.Id); Dictionary <string, int> senators = connection.Query <(string LisMemberId, int Id)> ($"SELECT LisMemberId, Id from dbo.Senators") .ToDictionary(i => i.LisMemberId, i => i.Id); foreach (RollCallVote vote in votes) { ProcessRollCallVote(legislativeItems, vote, connection, senators); } }