public static Interface.IQueryable <T, T2> GetQueryable <T, T2>(Config currentConnectionConfig) { if (currentConnectionConfig.DbType == DbType.SqlServer) { // return new sql<T, T2>(); } else { string className = "Queryable"; className = GetClassName(currentConnectionConfig.DbType.ToString(), className); Interface.IQueryable <T, T2> result = CreateInstance <T, T2, Interface.IQueryable <T, T2> >(className); return(result); } return(null); }
protected Interface.IQueryable <T> CreateQueryable <T>(Interface.IQueryable <T> result) where T : class, new() { var sqlBuilder = InstanceFactory.GetSqlbuilder(CurrentConfig); result.Context = this.Context; result.SqlBuilder = sqlBuilder; result.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(CurrentConfig); result.SqlBuilder.QueryBuilder.Builder = sqlBuilder; result.SqlBuilder.Context = result.SqlBuilder.QueryBuilder.Context = this.Context; var EntityInfo = this.Context.EntityMaintenance.GetEntityInfo <T>(); result.SqlBuilder.QueryBuilder.EntityType = typeof(T); result.SqlBuilder.QueryBuilder.EntityName = EntityInfo.DbTableName; result.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(CurrentConfig); return(result); }
protected Interface.IQueryable <T> CreateQueryable <T>() where T : class, new() { Interface.IQueryable <T> result = InstanceFactory.GetQueryable <T>(this.CurrentConfig); return(CreateQueryable(result)); }
protected void CreateQueryJoin <T, T2>(Expression <Func <T, T2, bool> > whereExpression, JoinType JoinType, Type[] types, Interface.IQueryable <T> queryable) where T : class, new() { this.CreateQueryable <T>(queryable); string TableA = string.Empty; string KeyA = string.Empty; string TableB = string.Empty; string KeyB = string.Empty; List <Parameter> paramters = new List <Parameter>(); // BinaryExpression binaryExpression = whereExpression.Body as BinaryExpression; TableA = ((MemberExpression)binaryExpression.Left).Member.DeclaringType.CustomAttributes.ElementAt(0).ConstructorArguments.ElementAt(0).Value.ToString(); KeyA = ((MemberExpression)binaryExpression.Left).Member.CustomAttributes.ElementAt(0).NamedArguments.FirstOrDefault(c => c.MemberName.Equals("ColumnName")).TypedValue.Value.ToString(); Expression right = binaryExpression.Right;//right part of the "==" of your predicate UnaryExpression data = binaryExpression.Right as UnaryExpression; var exp = data.Operand; TableB = ((MemberExpression)exp).Member.DeclaringType.CustomAttributes.ElementAt(0).ConstructorArguments.ElementAt(0).Value.ToString(); KeyB = ((MemberExpression)exp).Member.CustomAttributes.ElementAt(0).NamedArguments.FirstOrDefault(c => c.MemberName.Equals("ColumnName")).TypedValue.Value.ToString(); StringBuilder sqlrequest = new StringBuilder(); if (JoinType == JoinType.Inner) { sqlrequest.AppendFormat("SELECT * FROM {0} INNER JOIN {1} ON {0}.{2} = {1}.{3}", TableA, TableB, KeyA, KeyB); } if (JoinType == JoinType.Left) { sqlrequest.AppendFormat("SELECT * FROM {0} LEFT JOIN {1} ON {0}.{2} = {1}.{3}", TableA, TableB, KeyA, KeyB); } if (JoinType == JoinType.leftWithoutIntersection) { sqlrequest.AppendFormat("SELECT * FROM {0} LEFT JOIN {1} ON {0}.{2} = {1}.{3} WHERE {1}.{3} IS NULL", TableA, TableB, KeyA, KeyB); } if (JoinType == JoinType.Right) { sqlrequest.AppendFormat("SELECT * FROM {0} RIGHT JOIN {1} ON {0}.{2} = {1}.{3}", TableA, TableB, KeyA, KeyB); } if (JoinType == JoinType.RightWithoutIntersection) { sqlrequest.AppendFormat("SELECT * FROM {0} RIGHT JOIN {1} ON {0}.{2} = {1}.{3} WHERE {1}.{3} IS NULL", TableA, TableB, KeyA, KeyB); } if (JoinType == JoinType.FULL) { sqlrequest.AppendFormat("SELECT * FROM {0} FULL JOIN {1} ON {0}.{2} = {1}.{3}", TableA, TableB, KeyA, KeyB); } queryable.QueryBuilder.sql = sqlrequest; }