/// <summary> /// Get a collection of colleges and their associated users /// </summary> /// <param name="numberOfFriends"></param> /// <returns></returns> public IEnumerable<KeyValuePair<string, List<FacebookUser>>> GetFriendsCollegeEducationCollection(int numberOfFriends) { var friendsEducation = GetFriendsEducationCollection(); var collegeEducatedFriends = friendsEducation.Data.Where( e => e.Education.Exists(i => i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school")); var collegesDict = new Dictionary<string, List<FacebookUser>>(); foreach (var friend in collegeEducatedFriends) { var facebookUser = new FacebookUser { Name = friend.Name, Pic_Square = friend.Pic_Square, UID = friend.UID }; foreach (var school in friend.Education.Where(i => i.Type != null && (i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school"))) { string schoolName = school.School.Name; if (collegesDict.ContainsKey(schoolName)) { if (!collegesDict[schoolName].Exists(x => x.UID == facebookUser.UID)) { collegesDict[schoolName].Add(facebookUser); } } else { collegesDict.Add(schoolName, new List<FacebookUser> { facebookUser }); } } } return collegesDict.OrderByDescending(x => x.Value.Count).Take(numberOfFriends).ToList(); }
/// <summary> /// /// </summary> /// <param name="numberOfColleges"></param> /// <returns>Collection of Sexes (male and female) with associated list of Majors and their associated users</returns> public List<KeyValuePair<string, List<KeyValuePair<string, List<FacebookUser>>>>> GetTopMajorsByGender(int numberOfColleges) { var friendsEducation = GetFriendsEducationCollection(); var collegeEducatedFriends = friendsEducation.Data.Where( e => e.Education.Exists(i => i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school")); var femaleMajorDict = new Dictionary<string, List<FacebookUser>>(); var maleMajorDict = new Dictionary<string, List<FacebookUser>>(); foreach (var friend in collegeEducatedFriends) { var sex = friend.Sex.ToLower(); var facebookUser = new FacebookUser { Name = friend.Name, Pic_Square = friend.Pic_Square, UID = friend.UID }; foreach (var school in friend.Education.Where(i => i.Type != null && (i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school"))) { if (school.Concentration != null) { foreach (var concentration in school.Concentration) { string majorName = concentration.Name; switch (sex) { case "female": if (femaleMajorDict.ContainsKey(majorName)) { //femaleMajorDict[majorName].Add(facebookUser); if (!femaleMajorDict[majorName].Exists(x => x.UID == facebookUser.UID)) { femaleMajorDict[majorName].Add(facebookUser); } } else { femaleMajorDict.Add(majorName, new List<FacebookUser> { facebookUser }); } break; case "male": if (maleMajorDict.ContainsKey(majorName)) { //maleMajorDict[majorName].Add(facebookUser); if (!maleMajorDict[majorName].Exists(x => x.UID == facebookUser.UID)) { maleMajorDict[majorName].Add(facebookUser); } } else { maleMajorDict.Add(majorName, new List<FacebookUser> { facebookUser }); } break; } } } } } var femaleTopMajors = femaleMajorDict.OrderByDescending(x => x.Value.Count).Take(numberOfColleges).ToList(); var maleTopMajors = maleMajorDict.OrderByDescending(x => x.Value.Count).Take(numberOfColleges).ToList(); var ret = new List<KeyValuePair<string, List<KeyValuePair<string, List<FacebookUser>>>>> { new KeyValuePair<string, List<KeyValuePair<string, List<FacebookUser>>>>("female", femaleTopMajors), new KeyValuePair<string, List<KeyValuePair<string, List<FacebookUser>>>>("male", maleTopMajors) }; return ret; }
/// <summary> /// /// </summary> /// <param name="numberOfMajors"></param> /// <returns>Collection of Majors with their associated users</returns> public IEnumerable<KeyValuePair<string, List<FacebookUser>>> GetFriendsTopCollegeMajors(int numberOfMajors) { var friendsEducation = GetFriendsEducationCollection(); var collegeEducatedFriends = friendsEducation.Data.Where( e => e.Education.Exists(i => i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school")); var majorsDict = new Dictionary<string, List<FacebookUser>>(); foreach (var friend in collegeEducatedFriends) { var facebookUser = new FacebookUser { Name = friend.Name, Pic_Square = friend.Pic_Square, UID = friend.UID }; foreach (var school in friend.Education.Where(i => i.Type != null && (i.Type.ToLower() == "college" || i.Type.ToLower() == "graduate school"))) { if (school.Concentration != null) { foreach (var concentration in school.Concentration) { string majorName = concentration.Name; if (majorsDict.ContainsKey(majorName)) { if (majorsDict[majorName] == null) { majorsDict[majorName] = new List<FacebookUser> { facebookUser }; } else { //majorsDict[majorName].Add(facebookUser); if (!majorsDict[majorName].Exists(x => x.UID == facebookUser.UID)) { majorsDict[majorName].Add(facebookUser); } } } else { majorsDict.Add(majorName, new List<FacebookUser> { facebookUser }); } } } } } return majorsDict.OrderByDescending(x => x.Value.Count).Take(numberOfMajors).ToList(); }