public IQueryable ddlUsers_GetData() { Dictionary<int, string> users =new Dictionary<int,string>(); using (TrackrModels.UserManagement um = new TrackrModels.UserManagement()) { users =um.WebUsers.Select(i => new { UserID = i.UserID, Email = i.Email }).ToDictionary(i => i.UserID, i => i.Email); } List<int> userIDs = users.Keys.ToList(); using (TrackrModels.ClubManagement cm = new TrackrModels.ClubManagement()) { cm.People.Where(i => i.UserID.HasValue && userIDs.Contains(i.UserID.Value)).Select(i => new { UserID = i.UserID.Value, FName = i.FName, LName = i.LName }).ToList().ForEach(i => { bool hasL = !string.IsNullOrWhiteSpace(i.LName); bool hasF = !string.IsNullOrWhiteSpace(i.FName); users[i.UserID] = hasL && hasF ? string.Format("{0}, {1} - {2}", i.LName, i.FName, users[i.UserID]) : hasL || hasF ? string.Format("{0} - {1}", string.IsNullOrWhiteSpace(i.LName) ? i.FName : i.LName, users[i.UserID]) : users[i.UserID]; }); } return users.Select(i => new { Label = i.Value, Value = i.Key, HasName = i.Value.IndexOf(" - ") > -1 }) .OrderBy(i=>i.HasName).ThenBy(i=>i.Label).AsQueryable(); }
private List<DTO> GetMostRecent(int currentUserID) { Dictionary<int, DateTime> MostRecentCorrespondance = null; using (TrackrModels.UserManagement um = new TrackrModels.UserManagement()) { // get users this person recently sent to MostRecentCorrespondance = um.MessageRecipients.Where(i => i.Message.FromID == currentUserID).Select(i => new { UserID = i.UserID, CorrespondenceDate = i.SentDate }).GroupBy(i => i.UserID).Select(i => new { UserID = i.Key, LatestCorrespondenceDate = i.Max(j => j.CorrespondenceDate) }).OrderByDescending(i => i.LatestCorrespondenceDate).Take(20).ToDictionary(i => i.UserID, i => i.LatestCorrespondenceDate); } if (MostRecentCorrespondance == null) { return null; } List<int> userIDs = MostRecentCorrespondance.Keys.ToList(); Dictionary<int, string> UserNames = null; using (TrackrModels.ClubManagement cm = new TrackrModels.ClubManagement()) { UserNames = cm.People.Where(i => i.UserID.HasValue && userIDs.Contains(i.UserID.Value)).Select(i => new { UserID = i.UserID.Value, Name = i.FName + " " + i.LName }).ToDictionary(i => i.UserID, i => i.Name); } Dictionary<int, string> Emails = null; using (TrackrModels.UserManagement um = new TrackrModels.UserManagement()) { Emails = um.WebUsers.Where(i => userIDs.Contains(i.UserID)).Select(i => new { UserID = i.UserID, Email = i.Email }).ToDictionary(i => i.UserID, i => i.Email); } var data = userIDs.Select(i => new { LastCorrespondance = MostRecentCorrespondance[i], PersonName = UserNames.ContainsKey(i) ? UserNames[i] : null, Email = Emails[i], UserID = i }) .OrderByDescending(i => i.LastCorrespondance) .Select(i=> new DTO(){ label = string.IsNullOrWhiteSpace(i.PersonName) ? i.Email : string.Format("{0} <{1}>", i.PersonName, i.Email), value = i.Email }) .ToList(); return data; }