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()); }
public override int DeleteProxyEntity(int id) { var entity = ProxyUriEntities.Find(id); if (entity != null) { ProxyUriEntities.Remove(entity); return(SaveChanges()); } return(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); }
public override int UpdateProxyEntity(int id, Action <SpiderProxyUriEntity> updateAction) { var entity = ProxyUriEntities.Find(id); if (entity != null) { updateAction(entity); return(SaveChanges()); } return(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()); }
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); }
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()); }