public  ActionResult FindMember(FindMemberViewModel model)
        {
            if (ModelState.IsValid)
            {
                var result = from u in this.AppDbContext.Users
                             join m in this.AppDbContext.Members
                             on u.UserName equals m.MemberID
                             orderby m.RegisterDate descending
                             select new MemberInfoModel
                             {
                                 MemberID = m.MemberID,
                                 ReferenceID = m.ReferenceMemberID,
                                 Name = m.Name,
                                 IDCard = m.IDCard,
                                 Address = m.Address,
                                 Phone = u.PhoneNumber,
                                 Level = m.Level
                             };

                if (string.IsNullOrWhiteSpace(model.MemberID) == false)
                {
                    //OR --> use False
                    var predicate = PredicateBuilder.False<MemberInfoModel>();

                    predicate = predicate.Or(m => m.MemberID != null
                                  && m.MemberID.StartsWith(model.MemberID));

                    predicate = predicate.Or(m => m.ReferenceID != null && m.ReferenceID.StartsWith(model.MemberID,StringComparison.InvariantCultureIgnoreCase));

                    predicate = predicate.Or(m => m.Name != null && m.Name.IndexOf(model.MemberID,StringComparison.InvariantCultureIgnoreCase) > -1);

                    predicate = predicate.Or(m => m.IDCard != null && m.IDCard.StartsWith(model.MemberID, StringComparison.InvariantCultureIgnoreCase));

                    predicate = predicate.Or(m => m.Phone != null && m.Phone.StartsWith(model.MemberID, StringComparison.InvariantCultureIgnoreCase));

                    result = result.Where(predicate.Compile()).AsQueryable();
                }

                

                int size = result.Count();

                // paging
                result = result.Skip(model.page * model.PageSize).Take(model.PageSize);

                var items = result.ToList();

                return Json(new
                {
                    TotalSize = size,
                    Members = items
                }, JsonRequestBehavior.AllowGet);

            }
            return JsonMessage.BadRequestJsonResult(ModelState.Values.SelectMany(x => x.Errors));

        }
        public async Task<IActionResult> FindMember(FindMemberViewModel model) {
            if (ModelState.IsValid)
            {
                var result = from u in _applicationDbContext.Users
                             join m in _applicationDbContext.Members
                             on u.UserName equals m.MemberID
                             orderby m.RegisterDate descending
                             select new MemberInfoModel
                             {
                                 MemberID = m.MemberID,
                                 ReferenceID = m.ReferenceMemberID,
                                 Name = m.Name,
                                 IDCard = m.IDCard,
                                 Address = m.Address,
                                 Phone = u.PhoneNumber,
                                 Level = m.Level
                             };

                if (string.IsNullOrWhiteSpace(model.MemberID) == false) {
                    result = result.Where(
                        m =>  m.MemberID != null 
                              && m.MemberID.StartsWith(model.MemberID, StringComparison.InvariantCultureIgnoreCase));
                }
                
                if (string.IsNullOrWhiteSpace(model.ReferenceID) == false)
                {
                    result = result.Where(m => m.ReferenceID != null && m.ReferenceID.StartsWith(model.ReferenceID, 
                                                                        StringComparison.InvariantCultureIgnoreCase));
                }
                if (string.IsNullOrWhiteSpace(model.Name) == false)
                {
                    result = result.Where(m => m.Name != null && m.Name.IndexOf(model.Name) > -1);
                }

                if (string.IsNullOrWhiteSpace(model.IDCard) == false)
                {
                    result = result.Where(
                        m => m.IDCard != null && m.IDCard.StartsWith(model.IDCard, 
                                                     StringComparison.InvariantCultureIgnoreCase));
                }

                if (string.IsNullOrWhiteSpace(model.Phone) == false)
                {
                    result = result.Where(
                        m => m.Phone != null && m.Phone.StartsWith(model.Phone, 
                                                                    StringComparison.InvariantCultureIgnoreCase));
                }
       
               int size = await result.CountAsync();

              // paging
               result = result.Skip(model.page * model.PageSize).Take(model.PageSize);

              var items = result.ToList();

                return Json(new
                {
                    TotalSize = size,
                    Members = items
                });
           
            }
            return ErrorMessage.BadRequestJsonResult(ModelState.Values.SelectMany(x => x.Errors));

        }