Пример #1
0
        public TEntity GetSingle(string property, object value)
        {
            var expression = Lambda.Equal <TEntity>(property, value);
            var find       = GetSingle(expression);

            return(find);
        }
Пример #2
0
        public TEntity GetSingle(string property, object value)
        {
            //    var dynamicWhere = LinqHelper.GetExpression<TEntity, bool>($"entity.{property} == MongoDB.Bson.ObjectId.Parse(\"{value}\")", "entity");
            var expression = Lambda.Equal <TEntity>(property, value);
            var find       = GetSingle(expression);

            return(find);
        }
Пример #3
0
        public void TestEqual()
        {
            Expression <Func <Sample, bool> > expected = t => t.IntValue == 1;

            Assert.Equal(expected.ToString(), Lambda.Equal <Sample>("IntValue", 1).ToString());

            Expression <Func <Sample, bool> > expected2 = t => t.Test2.IntValue == 1;

            Assert.Equal(expected2.ToString(), Lambda.Equal <Sample>("Test2.IntValue", 1).ToString());
        }
Пример #4
0
        public void TestEqual()
        {
            //一级属性
            Expression <Func <Test1, bool> > expected = t => t.Age == 1;

            Assert.AreEqual(expected.ToString(), Lambda.Equal <Test1>("Age", 1).ToString());

            //二级属性
            Expression <Func <Test1, bool> > expected2 = t => t.A.Integer == 1;

            Assert.AreEqual(expected2.ToString(), Lambda.Equal <Test1>("A.Integer", 1).ToString());
        }
Пример #5
0
 /// <summary>
 ///     查询表达式,ID的查询
 /// </summary>
 protected virtual Expression <Func <TEntity, bool> > IdPredicate(object id)
 {
     return(Lambda.Equal <TEntity>("Id", id));
 }
Пример #6
0
        public TEntity GetSingleByIdNoTracking(TKey id)
        {
            var expression = Lambda.Equal <TEntity>("Id", id);

            return(FindAsNoTracking().Where(expression).FirstOrDefault());
        }
        /// <summary>
        /// 构建表达式树
        /// 调用:GenerateExpression(new string[]{"username"},new object[]{"zzl"},new string[]{"="});
        /// </summary>
        /// <typeparam name="T">表类型</typeparam>
        /// <param name="keys">字段名</param>
        /// <param name="values">字段值</param>
        /// <param name="operation">操作符</param>
        /// <returns></returns>
        public static Expression <Func <T, bool> > GenerateExpression <T>(List <FieldValueParam> listParam)
        {
            Expression <Func <T, bool> > expression_return = t => true;

            try
            {
                if (listParam.Count > 0)
                {
                    foreach (var item in listParam)
                    {
                        switch (item.operation)
                        {
                        // 等于
                        case "=":
                            expression_return = expression_return.And(Lambda.Equal <T>(item.name, item.value));
                            break;

                        // 大于
                        case ">":
                            expression_return = expression_return.And(Lambda.Greater <T>(item.name, item.value));
                            break;

                        // 大于等于
                        case ">=":
                            expression_return = expression_return.And(Lambda.GreaterEqual <T>(item.name, item.value));
                            break;

                        // 小于
                        case "<":
                            expression_return = expression_return.And(Lambda.Less <T>(item.name, item.value));
                            break;

                        // 小于等于
                        case "<=":
                            expression_return = expression_return.And(Lambda.LessEqual <T>(item.name, item.value));
                            break;

                        // 包含
                        case "%":
                            expression_return = expression_return.And(Lambda.Contains <T>(item.name, item.value));
                            break;

                        // 包含于
                        case "in":
                            string[] arrStr = item.value.ToString().Split(',');
                            Expression <Func <T, bool> > or_return = t => false;
                            if (arrStr.Length > 0)
                            {
                                foreach (var arr in arrStr)
                                {
                                    or_return = or_return.Or(Lambda.Contains <T>(item.name, arr));
                                }
                            }
                            expression_return = expression_return.And(or_return);
                            break;

                        // 不等于
                        case "!=":
                            expression_return = expression_return.And(Lambda.NotEqual <T>(item.name, item.value));
                            break;

                        default:
                            throw new ArgumentException("无效的操作符,目前只支持=,%,>,<,>=,<=,in");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(expression_return);
        }