Shared/Kernelx.MO2EFCore/Cmpts/EFMOI/Core/EFModelSet.cs

(开头部分) 3KB

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

using Kernelx.Cmpts.MOI;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Kernelx.Cmpts.EFMOI.Core
{
    internal class EFModelSet<T> : IModelSet<T> where T : class, new()
    { 
        private readonly Func<object, T> _find;
        private IQueryable<T> _set;
        private bool _isSkipDeleteStatus = false;
        private readonly Expression<Func<T, bool>> _del_expr;


        public EFModelSet(Func<object, T> find, IQueryable<T> set,bool isSkipDeleteStatus, Expression<Func<T, bool>> del_expr) 
        {
            _find = find;
            _set = set;
            _isSkipDeleteStatus = isSkipDeleteStatus;
            _del_expr = del_expr;   
        }


        #region 查询操作
        public T Get(object id)
        {  
            var ety = _find(id);
            return (_isSkipDeleteStatus || ety is not IDeletionModel || !(ety as IDeletionModel).DeleteStatus) ? ety : null;
        }
         
        public bool Any() => (_del_expr == null || _isSkipDeleteStatus) ? _set.Any() : _set.Any(_del_expr);

        public int Count() => (_del_expr == null || _isSkipDeleteStatus) ? _set.Count() : _set.Count(_del_expr);

        public T FirstOrDefault() => (_del_expr == null || _isSkipDeleteStatus) ? _set.FirstOrDefault() : _set.FirstOrDefault(_del_expr);


        public T LastOrDefault() => (_del_expr == null || _isSkipDeleteStatus) ? _set.LastOrDefault() : _set.LastOrDefault(_del_expr);

        public long LongCount() => (_del_expr == null || _isSkipDeleteStatus) ? _set.LongCount() : _set.LongCount(_del_expr);

        public Prop Max<Prop>(Expression<Func<T, Prop>> selector) => ((_del_expr == null || _isSkipDeleteStatus) ? _set : _set.Where(_del_expr)).Max(selector);

        public Prop Min<Prop>(Expression<Func<T, Prop>> selector) => ((_del_expr == null || _isSkipDeleteStatus) ? _set : _set.Where(_del_expr)).Min(selector);
          
        public IList<T> ToList(bool isTracking = false) 
        {
            var tmp = ((_del_expr == null || _isSkipDeleteStatus) ? _set : _set.Where(_del_expr));
            return (isTracking ? tmp : tmp.AsNoTracking()).ToList();
        }

        public IList<TResult> ToList<TResult>(Expression<Func<T, TResult>> selector) =>
             ((_del_expr == null || _isSkipDeleteStatus) ? _set.AsNoTracking() : _set.Where(_del_expr).AsNoTracking()).Select(selector).ToList();

        #endregion
后面还有 61 行代码,解锁后查看完整代码

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

AI 解读

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

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