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'"); }
/// <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); }
/// <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"); }
/// <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)); }