using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Hncore.Infrastructure.Data; using Hncore.Infrastructure.DDD; using Hncore.Infrastructure.EntitiesExtension; namespace Hncore.Infrastructure.EF { public static class QueryExtension { public static TEntity GetOne(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .FirstOrDefault(exp); } public static Task GetOneAsync(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .FirstOrDefaultAsync(exp); } public static PageData GetList(this DbContext dbcontext, Expression> exp, int pagesize, int pageindex, bool istotal) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(exp) .OrderByDescending(t => t.Id) .ListPager(pagesize, pageindex, istotal); } public static Task> GetListAsync(this DbContext dbcontext, Expression> exp, int pagesize, int pageindex, bool istotal) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(exp) .OrderByDescending(t => t.Id) .ListPagerAsync(pagesize, pageindex, istotal); } public static List GetList(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(exp) .ToList(); } public static Task> GetListAsync(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(exp) .ToListAsync(); } public static IQueryable GetListQueryable(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(exp); } public static bool Exists(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Any(exp); } public static Task ExistsAsync(this DbContext dbcontext, Expression> exp) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .AnyAsync(exp); } public static List TopN(this DbContext dbcontext, Expression> condition, int topN) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(condition) .TopN(topN) .ToList(); } public static Task> TopNAsync(this DbContext dbcontext, Expression> condition, int topN) where TEntity : class, IEntity { return dbcontext.Set().AsNoTracking() .Where(condition) .TopN(topN) .ToListAsync(); } } }