自动生成LAMBDA表达式树

本文介绍了如何在项目中创建查询实体并自动生成LAMBDA表达式树,以实现多条件、多字段的复杂查询。支持等于、LIKE、FROM、TO、IN以及自定义的mLIKE操作,其中mLIKE使用OR连接,其余操作使用AND连接。
摘要由CSDN通过智能技术生成

为项目中使用所写,根据查询实体自动生成表达式树。支持多个查询,多个字段,多个值。支持(=,like,from,to,in,(多个字段模糊匹配,使用mlike))但必须与查询实体大小写匹配。

一,建立查询实体。

    public class QueryItemModel
    {
        /// <summary>
        /// 关键字,多个key用逗号分隔
        /// </summary>
        public string key { get; set; }
        /// <summary>
        /// 值,多个value用逗号分隔
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 匹配方式,当key用逗号分隔时,match为mlike
        /// </summary>
        public string match { get; set; }
    }

二,建立,生成查询表达式类。

    public class LambdaUtil
    {

        public Expression<Func<T,bool>> QueryBuilder<T>(List<QueryItemModel> propertyNames)
        {
            if (propertyNames == null) return null;

            Type elementType = typeof(T);
            string key = "";
            string value = "";
            string match = "";
            bool IsMultipleKey = false;

            ParameterExpression param = Expression.Parameter(elementType,"c");
            BinaryExpression be = Expression.Equal(Expression.Constant(true), Expression.Constant(true));

            foreach(var item in propertyNames)
            {
                if (item.value.IsEmpty() && item.key.IsEmpty() && item.match.IsEmpty()) continue;

                key = item.key;
                value = item.value;
                match = item.match.ToLower();

                List<string> LKeys = key.SplitStringToList();
                if (LKeys.Count > 1) IsMultipleKey = true;

                foreach(var k in LKeys)
                {
                    PropertyInfo propertyInfo = elementType.GetProperty(k);
                    var proFullType = propertyInfo.PropertyType;
                    Type propertyType = proFullType.GenericTypeArguments.Length == 0 ? proFullType : proFullType.GenericTypeArguments[0];
                    var
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值