CommonUtils.Core/ef/DbContextUtil.cs

(开头部分) 11KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Swashbuckle.AspNetCore.Annotations;
using System;
using System.Data.Common;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace CommonUtils
{
    public static class DbContextUtil
    {
        static Map<Type, object> Includes = new Map<Type, object>();

        public static void SetInclude<TEntity>(Expression<Func<TEntity, object>> include) where TEntity : DbEntity
        => Includes[typeof(TEntity)] = include;

        public static Expression<Func<TEntity, object>> GetInclude<TEntity>() where TEntity : DbEntity
        {
            var type = typeof(TEntity);
            if (!Includes.ContainsKey(type))
                return null;
            return Includes[type] as Expression<Func<TEntity, object>>;
        }

        public static IQueryable<TEntity> Queryable<TEntity>(this DbContext db) where TEntity : DbEntity
        {
            var include = GetInclude<TEntity>();
            if (include != null)
                return db.Set<TEntity>().Include(include).AsNoTracking();
            return db.Set<TEntity>().AsNoTracking();
        }

        public static IOrderedQueryable<TEntity> NewOrder<TEntity, TKey>(this DbContext db, Expression<Func<TEntity, TKey>> keySelector) where TEntity : DbEntity
        => db.Queryable<TEntity>().OrderBy(keySelector);

        public static IOrderedQueryable<TEntity> NewOrderDesc<TEntity, TKey>(this DbContext db, Expression<Func<TEntity, TKey>> keySelector) where TEntity : DbEntity
        => db.Queryable<TEntity>().OrderByDescending(keySelector);

        public static Page<TEntity> Page<TEntity>(this DbContext db, int? pageNum, int? pageSize, Expression<Func<TEntity, bool>> predicate, IOrderedQueryable<TEntity> order = null)
            where TEntity : DbEntity
        {
            var page = new Page<TEntity>(pageNum, pageSize);
            page.Amount = db.Queryable<TEntity>().Where(predicate).Count();
            if (page.Amount > 0 && page.Size > 0)
            {
                if (order != null)
                    page.Records = order.Where(predicate).Skip(page.Skip).Take(page.Size).ToArray();
                else
                    page.Records = db.Queryable<TEntity>().Where(predicate).Skip(page.Skip).Take(page.Size).ToArray();
            }
            return page;
        }

        public static TEntity[] List<TEntity>(this DbContext db) where TEntity : DbEntity
        => db.Queryable<TEntity>().ToArray();

        public static TEntity[] List<TEntity>(this DbContext db, Expression<Func<TEntity, bool>> predicate, IOrderedQueryable<TEntity> order = null) where TEntity : DbEntity
后面还有 218 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。