C#新增Eq方法

在VOL.Core里的Extensions的LambdaExtensions类中添加Eq方法

/// <summary>
        /// 创建lambda表达式
        /// 用于数据库条件查询,与where方法类似,当你变量里放的是数据库内的字段,就可以使用,不需要像where写死
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <param name="propertyName"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IQueryable<T> Eq<T>(this IQueryable<T> source, string propertyName, object value)
        {
            // 获取类型T上的属性
            PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName);

            // 确保属性存在
            if (propertyInfo == null)
            {
                throw new ArgumentException($"Property '{propertyName}' does not exist on type '{typeof(T)}'.");
            }

            // 创建Lambda表达式
            ParameterExpression param = Expression.Parameter(typeof(T), "x");
            Expression body = Expression.Equal(
                Expression.Property(param, propertyInfo),
                Expression.Constant(value, propertyInfo.PropertyType)
            );
            LambdaExpression lambda = Expression.Lambda(body, param);

            // 创建Where表达式并应用
            return source.Provider.CreateQuery<T>(
                Expression.Call(
                    typeof(Queryable),
                    "Where",
                    new[] { typeof(T) },
                    source.Expression,
                    Expression.Quote((LambdaExpression)lambda)
                )
            );
        }

原代码写死

 private List<Bos_TableColumn> GetColumnList(string modelType,string tableName, string pageUrl, UserContext user, string refName, params string[] orderByFields)
        {

            List<Bos_TableColumn> billList = new List<Bos_TableColumn>();
            int userID = user.UserId;
            int TenantID = user.TenantID;
            // 添加额外的条件
            if ("IsList" == modelType|| "IsDatailList" == modelType) {
                billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName).ToList();
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName).ToList();
                }
            }
            else if ("IsQuery"== modelType)
            {
                billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName&&x.IsQuery==1).ToList();
                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsQuery == 1).ToList();
                }
            }
            else if ("IsEdit" == modelType)
            {
                billList = _repository.DbContext.Set<Bos_TableColumn>().
                    Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName && x.IsEdit == 1).ToList();
                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsEdit == 1).ToList();
                }
            }
            else if ("IsEditOptions" == modelType)
            {
                billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName).ToList();


                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl  && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsEditOptions == 1).ToList();
                }
                
            }
            else if ("IsQueryOptions" == modelType)
            {
                billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName && x.IsQueryOptions == 1).ToList();
                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsQueryOptions == 1).ToList();
                }
            }

        }

更改的新代码

private List<Bos_TableColumn> GetColumnList(string modelType,string tableName, string pageUrl, UserContext user, string refName, params string[] orderByFields)
        {

            List<Bos_TableColumn> billList = new List<Bos_TableColumn>();
            int userID = user.UserId;
            int TenantID = user.TenantID;
            // 添加额外的条件
            if ("IsList" == modelType|| "IsDatailList" == modelType) {
                 billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("UserID", userID).Eq("TenantID", TenantID).Eq("IsDefault", 0).Eq("Free3", refName).ToList();
                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("TenantID", TenantID).Eq("IsDefault", 1).Eq("Free3", refName).ToList();
                }
            }
            else 
            {
                billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("UserID", userID).Eq("TenantID", TenantID).Eq("IsDefault", 0).Eq("Free3", refName).Eq(modelType,1).ToList();
                if (billList == null)
                {
                    billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("TenantID", TenantID).Eq("IsDefault", 1).Eq("Free3", refName).Eq(modelType, 1).ToList();
                }
            }
        }
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值