public async Task <IDictionary <String, IList <dynamic> > > GetDeskMembersAsync(Int32 userId) { Check.IfNullOrZero(userId); var result = await CacheHelper.GetOrSetCacheAsync(new DesktopCacheKey(userId), () => _memberContext.GetMembersAsync(userId)); var deskGroup = result.GroupBy(a => a.DeskIndex); var deskDictionary = new Dictionary <String, IList <dynamic> >(); foreach (var desk in deskGroup) { var members = desk.ToList(); var deskMembers = new List <dynamic>(); foreach (var member in members.Where(w => w.MemberType == MemberType.Folder)) { deskMembers.Add(new { type = member.MemberType.ToString().ToLower(), memberId = member.Id, appId = member.Id, name = member.Name, icon = member.IsIconByUpload ? $@"{Appsetting.FileUrl}{member.IconUrl}" : member.IconUrl, width = member.Width, height = member.Height, isOnDock = member.IsOnDock, isOpenMax = member.IsOpenMax, isSetbar = member.IsSetbar, apps = members.Where(m => m.FolderId == member.Id).Select(app => new { type = app.MemberType.ToString().ToLower(), memberId = app.Id, appId = app.Id, name = app.Name, icon = app.IsIconByUpload ? $@"{Appsetting.FileUrl }{app.IconUrl}" : app.IconUrl, width = app.Width, height = app.Height, isOnDock = app.IsOnDock, isOpenMax = app.IsOpenMax, isSetbar = app.IsSetbar, }) }); } foreach (var member in members.Where(w => (w.MemberType == MemberType.App || w.MemberType == MemberType.Widget) && w.FolderId == 0)) { deskMembers.Add(new { type = member.MemberType.ToString().ToLower(), memberId = member.Id, appId = member.Id, name = member.Name, icon = member.IsIconByUpload ? $@"{Appsetting.FileUrl}{ member.IconUrl}" : member.IconUrl, width = member.Width, height = member.Height, isOnDock = member.IsOnDock, isOpenMax = member.IsOpenMax, isSetbar = member.IsSetbar }); } deskDictionary.Add(desk.Key.ToString(), deskMembers); } return(deskDictionary); }