예제 #1
0
        public override ICollection <SpiderProxyUriEntity> SelectProxyEntities(ISpiderProxyUriEntityOption entityOption, int recentDays = 10, int count = 0)
        {
            if (recentDays < 1)
            {
                recentDays = 360;
            }
            IQueryable <SpiderProxyUriEntity> query;

            if (entityOption is null)
            {
                query = ProxyUriEntities.AsNoTracking()
                        .Where(p => MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, p.UpdateTime, DateTime.UtcNow) <= recentDays)
                        .OrderByDescending(e => e.UpdateTime);
            }
            else
            {
                var queryableData = ProxyUriEntities.AsNoTracking().AsQueryable();
                var expression    = entityOption.GetExpressionTree(queryableData);
                if (expression is null)
                {
                    query = ProxyUriEntities
                            .Where(p => MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, p.UpdateTime, DateTime.UtcNow) <= recentDays)
                            .OrderByDescending(e => e.UpdateTime);
                }
                else
                {
                    query = queryableData.Provider
                            .CreateQuery <SpiderProxyUriEntity>(expression)
                            .Where(p => MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, p.UpdateTime, DateTime.UtcNow) <= recentDays)
                            .OrderByDescending(e => e.UpdateTime);
                }
            }
            return((count > 0 ? query.Take(count) : query).ToArray());
        }
예제 #2
0
        public override int DeleteProxyEntity(int id)
        {
            var entity = ProxyUriEntities.Find(id);

            if (entity != null)
            {
                ProxyUriEntities.Remove(entity);
                return(SaveChanges());
            }
            return(0);
        }
예제 #3
0
        public override int DeleteProxyEntity(string host, int port)
        {
            var entity = ProxyUriEntities.FirstOrDefault(p => p.Host == host && p.Port == port);

            if (entity != null)
            {
                ProxyUriEntities.Remove(entity);
                return(SaveChanges());
            }
            return(0);
        }
예제 #4
0
        public override int UpdateProxyEntity(int id, Action <SpiderProxyUriEntity> updateAction)
        {
            var entity = ProxyUriEntities.Find(id);

            if (entity != null)
            {
                updateAction(entity);
                return(SaveChanges());
            }
            return(0);
        }
예제 #5
0
        public override int UpdateProxyEntities(IEnumerable <int> ids, Action <SpiderProxyUriEntity> updateAction)
        {
            var distinctIds = ids.Distinct();

            foreach (var id in distinctIds)
            {
                var entity = ProxyUriEntities.Find(id);
                if (entity != null)
                {
                    updateAction(entity);
                }
            }
            return(SaveChanges());
        }
예제 #6
0
        public override int InsertProxyEntities(IEnumerable <SpiderProxyUriEntity> entities)
        {
            int count            = 0;
            var distinctEntities = entities.Distinct(SpiderProxyEntityComparer.Default);

            foreach (var entity in distinctEntities)
            {
                if (!ProxyUriEntities.Any(p => p.Port == entity.Port && p.Host == entity.Host))
                {
                    ProxyUriEntities.Add(entity);
                    count++;
                }
            }
            return(count > 0 ? SaveChanges() : 0);
        }
예제 #7
0
        public override ICollection <SpiderProxyUriEntity> SelectProxyEntities(Predicate <SpiderProxyUriEntity> predicate, int recentDays = 10, int count = 0)
        {
            if (recentDays < 1)
            {
                recentDays = 360;
            }
            Expression <Func <SpiderProxyUriEntity, bool> > filter = predicate != null
                                ? (p => MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, p.UpdateTime, DateTime.UtcNow) <= recentDays && predicate(p))
                                : (Expression <Func <SpiderProxyUriEntity, bool> >)(p => MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, p.UpdateTime, DateTime.UtcNow) <= recentDays);
            var query = ProxyUriEntities
                        .Where(filter)
                        .OrderByDescending(e => e.UpdateTime);

            return((count > 0 ? query.Take(count) : query).ToArray());
        }