public IEnumerable <AddressBookMobile> Change(IEnumerable <AddressBookItem> items)
        {
            List <AddressBookMobile> result = new List <AddressBookMobile>();

            if (items == null)
            {
                return(Enumerable.Empty <AddressBookMobile>().ToArray());
            }
            var books = items.Where(b => StringRule.VerifyMobile(b.Mobile) && (b.TgUid == null || b.TgUid != _User.Uid)).ToArray();

            if (books.Length == 0)
            {
                return(Enumerable.Empty <AddressBookMobile>().ToArray());
            }
            foreach (var item in books)
            {
                item.Mobile  = (item.Mobile ?? String.Empty).Trim();
                item.Name    = (item.Name ?? String.Empty).Trim().Left(50);
                item.Company = (item.Company ?? String.Empty).Trim().Left(100);
            }

            var mobiles = books.Select(b => b.Mobile).Distinct().ToArray();

            lock (_Locker)
            {
                var exist = _AddressBookMobileRepository.Entities.Where(m => m.uid == _User.Uid && mobiles.Contains(m.mobile)).Select(m => m.mobile).ToArray();
                if (exist.Length > 0)
                {
                    mobiles = mobiles.Except(exist).ToArray();
                }
                if (mobiles.Length > 0)
                {
                    result.AddRange(mobiles.Select(m => new Data.AddressBookMobile
                    {
                        mobile     = m,
                        createDate = DateTime.Now,
                        uid        = _User.Uid,
                        tguid      = books.Where(b => b.Mobile == m).Select(b => b.TgUid).FirstOrDefault(),
                        company    = books.Where(b => b.Mobile == m).Select(b => b.Company).FirstOrDefault(),
                        name       = books.Where(b => b.Mobile == m).Select(b => b.Name).FirstOrDefault()
                    }));
                    _AddressBookMobileRepository.AddRange(result);
                    _AddressBookMobileRepository.SaveChanges();
                }
                _PushManager.GenContact(_User.Uid, _User.Mobile, result.Select(b => new FCRMAPI.Request.Contact()
                {
                    Aid = b.id, Mobile = b.mobile
                }).ToArray());
            }
            return(result);
        }
        public bool RePushUserContactToNoqlDataBase(int start, int limit)
        {
            bool end    = false;
            var  source = _FootChatUserRepository.Entities;
            var  count  = source.Count();

            if (start + limit >= count)
            {
                end = true;
            }
            var users = source.Select(p => new
            {
                uid     = p.uid,
                mobile  = p.mobile,
                created = p.created
            });
            var userArr      = users.OrderBy(p => p.created).Take(start, limit).ToArray();
            var uids         = userArr.Select(p => p.uid).ToArray();
            var addressBooks = _AddressBookMobileRepository.Entities.AsNoTracking().Where(p => uids.Contains(p.uid)).GroupBy(p => p.uid)
                               .ToDictionary(p => p.Key, p => p.Select(a => new
            {
                aid    = a.id,
                mobile = a.mobile
            }));

            foreach (var user in userArr)
            {
                if (addressBooks.ContainsKey(user.uid))
                {
                    _PushManager.GenContact(user.uid, user.mobile, addressBooks[user.uid].Select(b => new FCRMAPI.Request.Contact()
                    {
                        Aid = b.aid, Mobile = b.mobile
                    }).ToArray());
                }
            }
            return(end);
        }