コード例 #1
0
    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);
    }
コード例 #2
0
        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);
            }
        }