private void TestEntityParam(TestValue v)
        {
            Expression <Func <CustomersEntity, bool> > queryExp1 = ct => ct.CustomerID <= v.Id && (SQLMethod.IsNull(ct.CustomerCity));

            var    translate = new SqlTranslateFormater();
            string sql       = translate.Translate(queryExp1);

            Assert.Equal(sql, "CustomerID <= 50 AND CustomerCity is NULL");
        }
        public void SimpleWhereMethodTest2()
        {
            Expression <Func <CustomersEntity, bool> > queryExp1 = ct => ct.CustomerID <= 50 && (SQLMethod.IsNull(ct.CustomerCity));

            var    translate = new SqlTranslateFormater();
            string sql       = translate.Translate(queryExp1);

            Assert.Equal(sql, "CustomerID <= 50 AND CustomerCity is NULL");
        }
        public void SimpleWhereTest1()
        {
            Expression <Func <CustomersEntity, bool> > queryExp1 = ct => ct.CustomerID < 50 && ct.CustomerCity == "B-City";

            var    translate = new SqlTranslateFormater();
            string sql       = translate.Translate(queryExp1);

            Assert.Equal(sql, "CustomerID < 50 AND CustomerCity = 'B-City'");
        }
Пример #4
0
        /// <summary>
        /// 解析型如“a=>a.id”的表达式,既 f(x':TModel) = x'.y':object
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="expr"></param>
        /// <returns></returns>
        internal static string TranslateObject <TModel>(Expression <Func <TModel, object> > expr, IDataProvider dp)
        {
            var exprVisitor = new SqlTranslateFormater();

            exprVisitor.Provider = dp;
            string cmd = exprVisitor.Translate(expr);

            return(cmd);
        }
Пример #5
0
        /// <summary>
        /// 解析整个表达式,转换为SQL语句
        /// </summary>
        /// <param name="expr"></param>
        /// <returns></returns>
        public static string TranslateConditional(Expression expr, IDataProvider dp)
        {
            var exprVisitor = new SqlTranslateFormater();

            exprVisitor.Provider = dp;
            string cmd = exprVisitor.Translate(expr);

            return(cmd);
        }
        public void SimpleWhereTest2()
        {
            Expression <Func <CustomersEntity, bool> > queryExp1 = ct => ct.CustomerID == 1 &&
                                                                   (ct.CustomerCity == "B-City" || ct.CustomerNumber == "0000");

            var    translate = new SqlTranslateFormater();
            string sql       = translate.Translate(queryExp1);

            Assert.Equal(sql, "CustomerID = 1 AND (CustomerCity = 'B-City' OR CustomerNumber = '0000')");
        }
        public void SimpleWhereMethodTest3()
        {
            //IEnumerable<int> ids = new List<int>() { 40, 50 };//通过测试
            //int[] ids = new[] {40, 50};//通过测试
            List <int> ids = new List <int>()
            {
                40, 50
            };                                         //通过测试

            Expression <Func <CustomersEntity, bool> > queryExp1 = ct => ids.Contains(ct.CustomerID) && (SQLMethod.IsNull(ct.CustomerCity));

            var    translate = new SqlTranslateFormater();
            string sql       = translate.Translate(queryExp1);

            Assert.Equal(sql, "CustomerID In (40,50) AND CustomerCity is NULL");
        }
Пример #8
0
        /// <summary>
        /// 执行入口,解析表达式并生成执行SQL语句,返回SQL数据源数据
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public object Execute(Expression expression)
        {
            var t = new SqlTranslateFormater();

            t.Provider = DataProvider;
            string sql = t.Translate(expression);

            DataProvider.Log = sql;
            var  reader      = DataProvider.QueryData(new Command(sql));
            Type elementType = TypeSystem.GetElementType(expression.Type);

            return(Activator.CreateInstance(
                       typeof(ObjectReader <>).MakeGenericType(elementType),
                       BindingFlags.Instance | BindingFlags.NonPublic, null,
                       new object[] { reader },
                       null));
        }