public IHttpActionResult GetUsers(Int32 page = 1, String name = null, String login = null, String email = null, USER_STATUS?status = null, ColumnIndex colIndex = ColumnIndex.NAME, Boolean asc = true) { UserInfo user; IEnumerable <UserInfo> userData; Dictionary <Int32, Int32> cmntNumber = null; Dictionary <Int32, Int32> artNumber = null; Int32 dataCount = 0; using (var db = new Model.ArticleLibraryContext()) { UserStore store = new UserStore(db); if ((user = GetInfoInternally(store)) == null) { return(Unauthorized()); } var curUserId = user.id; var users = store.GetProperUsers().Where(u => u.ID != curUserId); if (status != null) { users = users.Where(u => u.STATUS == status); } if (login != null) { var filterLogin = login.ToUpper(); users = users.Where(u => u.LOGIN.ToUpper().Contains(filterLogin)); } if (email != null || name != null) { users = users.Where(u => u.SHOW_PRIVATE_INFO); if (email != null) { var filterEmail = email.ToUpper(); users = users.Where(u => u.EMAIL.ToUpper().Contains(filterEmail)); } if (name != null) { var filterName = name.ToUpper(); users = users.Where(u => (u.FIRST_NAME + u.LAST_NAME + u.PATRONYMIC_NAME).ToUpper().Contains(filterName)); } } users = OrderUsers(users, colIndex, asc); dataCount = users.Count(); users = users.Skip((page - 1) * pageLength).Take(pageLength); cmntNumber = (from uc in db.USER_COMMENT.Where(c => c.STATUS != COMMENT_STATUS.DELETED) join uId in users.Select(us => us.ID) on uc.AUTHOR_ID equals uId group uc by uc.AUTHOR_ID into g select g).ToDictionary(k => k.Key, v => v.Count()); artNumber = (from art in db.ARTICLE.Where(a => a.STATUS != ARTICLE_STATUS.DRAFT) join uId in users.Select(us => us.ID) on art.AUTHOR_ID equals uId group art by art.AUTHOR_ID into g select g).ToDictionary(k => k.Key, v => v.Count()); userData = users.ToArray().Select(u => new UserInfo(u, true)); } return(Ok(new { data = userData, dataCount = dataCount, cmntNumber = cmntNumber, artNumber = artNumber, pageLength = pageLength })); }
public ActionResult GetUsers(Int32 page = 1, String name = null, String login = null, String email = null, UserStatus?Status = null, ColumnIndex colIndex = ColumnIndex.NAME, Boolean asc = true) { UserInfo user; IEnumerable <UserInfo> userData; Dictionary <Int32, Int32> cmntNumber = null; Dictionary <Int32, Int32> artNumber = null; Int32 dataCount = 0; using (var db = new Model.ArticleLibraryContext()) { UserStore store = new UserStore(db); if ((user = GetInfoInternally(store)) == null) { return(Unauthorized()); } var curUserId = user.id; var users = store.GetProperUsers().Where(u => u.Id != curUserId); if (Status != null) { users = users.Where(u => u.Status == Status); } if (login != null) { users = users.Where(u => u.Login.IndexOf(login, NO_CASE_COMPARISON) != -1); } if (email != null || name != null) { users = users.Where(u => u.ShowPrivateInfo); if (email != null) { users = users.Where(u => u.Email.IndexOf(email, NO_CASE_COMPARISON) != -1); } if (name != null) { users = users.Where(u => (u.FirstName + u.LastName + u.PatronymicName) .IndexOf(name, NO_CASE_COMPARISON) != -1); } } users = OrderUsers(users, colIndex, asc); dataCount = users.Count(); users = users.Skip((page - 1) * PAGE_LENGTH).Take(PAGE_LENGTH); cmntNumber = (from uc in db.UserComment.Where(c => c.Status != CommentStatus.DELETED) join uId in users.Select(us => us.Id) on uc.AuthorId equals uId group uc by uc.AuthorId into g select g).ToDictionary(k => k.Key, v => v.Count()); artNumber = (from art in db.Article.Where(a => a.Status != ArticleStatus.DRAFT) join uId in users.Select(us => us.Id) on art.AuthorId equals uId group art by art.AuthorId into g select g).ToDictionary(k => k.Key, v => v.Count()); userData = users.ToArray().Select(u => new UserInfo(u, true)); } return(Ok(new { data = userData, dataCount = dataCount, cmntNumber = cmntNumber, artNumber = artNumber, pageLength = PAGE_LENGTH })); }