public ActionResult Index(AttendeeFilterViewModel model)
        {
            if (ModelState.IsValid)
            {
                //get selected session Class Ids
                var selectedFilter = model.AttendeeSessionFilter.Where(a => a.IsSelected)
                                     .Select(a =>
                                             new { SessionTopicID = a.SessionTopicID, TimeSlots = a.TimeSlots.Where(b => b.IsSelected) }

                                             ).ToList();

                //create filters ids
                //where each row is topic id with times slots in that topic
                List <Tuple <int, List <int> > > filterIds = new List <Tuple <int, List <int> > >();

                foreach (var item in selectedFilter)
                {
                    var tuple = new Tuple <int, List <int> >(item.SessionTopicID, item.TimeSlots.Select(a => a.SessionClassID).ToList());
                    filterIds.Add(tuple);
                }
                //get attendeeSession data that match the criteria
                var attendeeSessions = _SessionAttendeeService.
                                       GetAllFilterByTopicAndTime(filterIds.ToArray(), model.AndingSession, model.AndingTime).ToList();
                //var attendeeSessions = _SessionAttendeeService.GetAll();

                //search the attend that meet the criteria
                var attendees = _SessionAttendeeService.GetAllToPivotTable(attendeeSessions.Select(a => a.Id));

                var result = Mapper.Map <DataTable, SessionAttendeeViewModel>(attendees);

                //add mandatory fields
                result.DataHeader.Add("Session");
                result.DataHeader.Add("StartDate");
                result.DataHeader.Add("EndDate");
                result.DataHeader[0] = "Attendee ID";


                foreach (var item in result.DataValue)
                {
                    var attendeeSession = attendeeSessions.SingleOrDefault(a => a.Id == int.Parse(item.First()));
                    if (attendeeSession == null)
                    {
                        continue;
                    }
                    item.Add(attendeeSession.SessionClass.SessionTopic.Name);
                    item.Add(attendeeSession.SessionClass.StartDate.ToString("dd/MM/yyyy h:mm tt"));
                    item.Add(attendeeSession.SessionClass.EndDate.ToString("dd/MM/yyyy h:mm tt"));
                    //replace the db id with Attendee id
                    item[0] = attendeeSession.AttendeeID.ToString();
                }
                model.SessionAttendeeResultViewModel = result;
            }
            return(View(model));
        }