示例#1
0
        public override void Execute()
        {
            var ctx = new MNISModel.MNISEntities(new Uri("http://data.parliament.uk/membersdataplatform/open/OData.svc"));

            var constituencies = ctx.Constituencies
                                 .Expand("ConstituencyAreas/Area")
                                 .Where(c => c.EndDate == null);

            foreach (var c in constituencies)
            {
                const int Country                  = 1;
                const int Region                   = 8;
                const int DistrictNI               = 3;
                const int FormerMetCounty          = 4;
                const int ShireCountyEngland       = 9;
                const int UnitaryAuthorityScotland = 12;
                const int UnitaryAuthorityWales    = 13;
                var       areas = c.ConstituencyAreas.Where(ca => ca.EndDate == null && ca.Area != null).
                                  Select(ca => new { ca.Area.Name, Type = ca.Area.AreaType_Id }).Distinct().ToList();
                var row = new Row
                {
                    ["Id"]       = c.Constituency_Id,
                    ["Name"]     = c.Name,
                    ["Country"]  = areas.FirstOrDefault(a => a.Type == Country).Name,
                    ["Region"]   = areas.FirstOrDefault(a => a.Type == Region).Name,
                    ["Counties"] = areas.Where(a => a.Type == DistrictNI || a.Type == FormerMetCounty ||
                                               a.Type == ShireCountyEngland || a.Type == UnitaryAuthorityScotland ||
                                               a.Type == UnitaryAuthorityWales).Select(a => a.Name).ToArray()
                };
                Output.AddRow(row);
            }
        }
示例#2
0
        public IEnumerable <Member> GetAllMembers()
        {
            var ctx     = new MNISModel.MNISEntities(new Uri(OdataServerUrl));
            var members = ctx.Members
                          //.Expand("MemberParties/Party")
                          //.Expand("MembershipFrom")
                          .Expand("MemberPreferredNames")
                          .Expand("MemberGovernmentPosts/GovernmentPost")
                          .Expand("MemberOppositionPosts/OppositionPost")
                          .Expand("MemberParliamentaryPosts/ParliamentaryPost")
                          .Expand("MemberConstituencies")
                          .Expand("MemberAddresses")
                          .Where(m => m.CurrentStatusActive || m.EndDate > new DateTime(2015, 05, 06));

            foreach (var m in members)
            {
                var member = new Member()
                {
                    Id             = m.Member_Id,
                    AddressAs      = m.AddressAs ?? m.NameDisplayAs,
                    Party          = m.Party,
                    IsActiveMember = m.CurrentStatusActive,
                    StartDate      = m.StartDate,
                    EndDate        = m.EndDate,
                    EndReason      = m.EndReason,
                    DateOfBirth    = m.DateOfBirth,
                    DateOfDeath    = m.DateOfDeath
                };
                member.House = m.House;
                if (m.House == "Commons")
                {
                    member.Constituency   = m.MembershipFrom;
                    member.ConstituencyId = m.MemberConstituencies.Where(c => c.EndDate is null).FirstOrDefault()?.Constituency_Id;
                }
                else if (m.House == "Lords")
                {
                    member.TypeOfPeer = m.MembershipFrom;
                }
                // preferred name
                var preferredName = m.MemberPreferredNames
                                    .Where(n => n.EndDate == null)
                                    .OrderByDescending(n => n.StartDate)
                                    .FirstOrDefault();
                if (preferredName != null)
                {
                    member.FirstName   = preferredName.Forename;
                    member.MiddleNames = preferredName.MiddleNames;
                    member.LastName    = preferredName.Surname;
                }
                else
                {
                    member.FirstName   = m.Forename;
                    member.MiddleNames = m.MiddleNames;
                    member.LastName    = m.Surname;
                }
                // email adresses
                var emailAddresses = m.MemberAddresses
                                     .Where(a => !string.IsNullOrEmpty(a.Email) && (a.Email.Trim() != "*****@*****.**"))
                                     .OrderByDescending(a => a.IsPreferred)
                                     .Select(a => a.Email.Trim())
                                     .Distinct()
                                     .ToList();
                if (emailAddresses.Count > 0)
                {
                    member.EmailAddress1 = emailAddresses[0];
                }
                if (emailAddresses.Count > 1)
                {
                    member.EmailAddress2 = emailAddresses[1];
                }
                if (emailAddresses.Count > 2)
                {
                    member.EmailAddress3 = emailAddresses[2];
                }
                // Posts
                var parliamentaryPosts = m.MemberParliamentaryPosts
                                         .Where(p => p.EndDate == null)
                                         .Select(p => p.ParliamentaryPost.Name)
                                         .ToArray();
                var govPosts = m.MemberGovernmentPosts
                               .Where(p => p.EndDate == null)
                               .Select(p => p.GovernmentPost.Name)
                               .ToArray();
                member.GovernmentPosts = string.Join("; ", govPosts);
                var oppPosts = m.MemberOppositionPosts
                               .Where(p => p.EndDate == null)
                               .Select(p => p.OppositionPost.Name)
                               .ToArray();
                member.OppositionPosts    = string.Join("; ", oppPosts);
                member.ParliamentaryPosts = string.Join("\n", parliamentaryPosts);
                yield return(member);
            }
        }