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); } }
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); } }