public async Task Update(SecurityGroupUserDTO dto) { var oldSecurityGroups = DataContext.SecurityGroupUsers.Where(x => x.UserID == dto.UserID); var newSecurityGroupUsers = dto.SecurityGroups.Where(d => !oldSecurityGroups.Select(x => x.SecurityGroupID).Contains(d.ID)).Select(x => new SecurityGroupUser { UserID = dto.UserID, SecurityGroupID = x.ID }); var dtoSecurityIDs = dto.SecurityGroups.Select(x => x.ID); var deleteSecurityGroupUsers = (from d in oldSecurityGroups let ids = d.SecurityGroupID where !dtoSecurityIDs.Contains(ids) select d); if (newSecurityGroupUsers.Count() > 0) { DataContext.SecurityGroupUsers.AddRange(newSecurityGroupUsers); } if (deleteSecurityGroupUsers.Count() > 0) { DataContext.SecurityGroupUsers.RemoveRange(deleteSecurityGroupUsers); } await DataContext.SaveChangesAsync(); }
public SecurityGroupUserDTO Get(Guid userID) { var sg = new SecurityGroupUserDTO(); sg.UserID = userID; sg.SecurityGroups = (from sgs in DataContext.SecurityGroupUsers.AsNoTracking() where sgs.UserID == userID select new SecurityGroupDTO { ID = sgs.SecurityGroupID, Name = sgs.SecurityGroup.Name }); return(sg); }