This commit is contained in:
sunkaixuan
2017-05-25 19:49:20 +08:00
parent de9f297b17
commit a7cd1a541a
6 changed files with 225 additions and 72 deletions

View File

@@ -10,6 +10,17 @@ using System.Text.RegularExpressions;
namespace SqlSugar
{
public partial class QueryableProvider<T, T2,T3,T4> : QueryableProvider<T>, ISugarQueryable<T, T2,T3,T4>
{
}
public partial class QueryableProvider<T, T2,T3> : QueryableProvider<T>, ISugarQueryable<T, T2,T3>
{
}
public partial class QueryableProvider<T,T2> : QueryableProvider<T>,ISugarQueryable<T,T2>{
}
public partial class QueryableProvider<T> : QueryableAccessory, ISugarQueryable<T>
{
public SqlSugarClient Context { get; set; }

View File

@@ -18,7 +18,30 @@ namespace SqlSugar
ISugarQueryable<T> reval = CreateInstance<T,ISugarQueryable<T>>(className, currentConnectionConfig.DbType);
return reval;
}
public static ISugarQueryable<T,T2> GetQueryable<T,T2>(IConnectionConfig currentConnectionConfig)
{
CheckConfig(currentConnectionConfig);
string className = "Queryable";
className = GetClassName(currentConnectionConfig.DbType, className);
ISugarQueryable<T,T2> reval = CreateInstance<T,T2, ISugarQueryable<T,T2>>(className, currentConnectionConfig.DbType);
return reval;
}
public static ISugarQueryable<T, T2, T3> GetQueryable<T, T2,T3>(IConnectionConfig currentConnectionConfig)
{
CheckConfig(currentConnectionConfig);
string className = "Queryable";
className = GetClassName(currentConnectionConfig.DbType, className);
ISugarQueryable<T, T2, T3> reval = CreateInstance<T, T2, T3, ISugarQueryable<T, T2,T3>>(className, currentConnectionConfig.DbType);
return reval;
}
public static ISugarQueryable<T, T2, T3, T4> GetQueryable<T, T2, T3, T4>(IConnectionConfig currentConnectionConfig)
{
CheckConfig(currentConnectionConfig);
string className = "Queryable";
className = GetClassName(currentConnectionConfig.DbType, className);
ISugarQueryable<T, T2, T3, T4> reval = CreateInstance<T, T2, T3, T4, ISugarQueryable<T, T2, T3, T4>>(className, currentConnectionConfig.DbType);
return reval;
}
public static QueryBuilder GetQueryBuilder(IConnectionConfig currentConnectionConfig)
{
CheckConfig(currentConnectionConfig);
@@ -120,6 +143,75 @@ namespace SqlSugar
var reval = (Restult)Activator.CreateInstance(type, true);
return reval;
}
private static Restult CreateInstance<T,T2, Restult>(string className, string dbType)
{
var cacheKey = className + typeof(T).FullName+typeof(T2).FullName;
Type type;
if (typeCache.ContainsKey(cacheKey))
{
type = typeCache[cacheKey];
}
else
{
lock (typeCache)
{
type = Type.GetType(className + "`2", true).MakeGenericType(typeof(T),typeof(T2));
Check.ArgumentNullException(type, string.Format(ErrorMessage.ObjNotExist, className));
if (!typeCache.ContainsKey(cacheKey))
{
typeCache.Add(cacheKey, type);
}
}
}
var reval = (Restult)Activator.CreateInstance(type, true);
return reval;
}
private static Restult CreateInstance<T, T2,T3, Restult>(string className, string dbType)
{
var cacheKey = className + typeof(T).FullName + typeof(T2).FullName+typeof(T3).FullName;
Type type;
if (typeCache.ContainsKey(cacheKey))
{
type = typeCache[cacheKey];
}
else
{
lock (typeCache)
{
type = Type.GetType(className + "`3", true).MakeGenericType(typeof(T), typeof(T2),typeof(T3));
Check.ArgumentNullException(type, string.Format(ErrorMessage.ObjNotExist, className));
if (!typeCache.ContainsKey(cacheKey))
{
typeCache.Add(cacheKey, type);
}
}
}
var reval = (Restult)Activator.CreateInstance(type, true);
return reval;
}
private static Restult CreateInstance<T, T2,T3,T4, Restult>(string className, string dbType)
{
var cacheKey = className + typeof(T).FullName + typeof(T2).FullName + typeof(T3).FullName + typeof(T4).FullName;
Type type;
if (typeCache.ContainsKey(cacheKey))
{
type = typeCache[cacheKey];
}
else
{
lock (typeCache)
{
type = Type.GetType(className + "`4", true).MakeGenericType(typeof(T), typeof(T2), typeof(T4), typeof(T4));
Check.ArgumentNullException(type, string.Format(ErrorMessage.ObjNotExist, className));
if (!typeCache.ContainsKey(cacheKey))
{
typeCache.Add(cacheKey, type);
}
}
}
var reval = (Restult)Activator.CreateInstance(type, true);
return reval;
}
private static T CreateInstance<T>(string className, string dbType)
{
Type type;

View File

@@ -17,15 +17,15 @@ namespace SqlSugar
ISugarQueryable<T> With(string withString);
ISugarQueryable<T> AddParameters(object pars);
ISugarQueryable<T> AddParameters(SugarParameter[] pars);
ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type=JoinType.Left);
ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left);
ISugarQueryable<T> Where(Expression<Func<T, bool>> expression);
ISugarQueryable<T> Where(string whereString, object whereObj = null);
ISugarQueryable<T> Where<T2>(Expression<Func<T2, bool>> expression);
ISugarQueryable<T> Where<T2, T3>(Expression<Func<T2, T3, bool>> expression);
ISugarQueryable<T> Where<T2, T3, T4>(Expression<Func<T2, T3, T4, bool>> expression);
ISugarQueryable<T> Where<T2, T3, T4, T5>(Expression<Func<T2, T3, T4, T5, bool>> expression) ;
ISugarQueryable<T> Where<T2, T3, T4, T5, T6>(Expression<Func<T2, T3, T4, T5, T6, bool>> expression) ;
ISugarQueryable<T> Where<T2, T3, T4, T5>(Expression<Func<T2, T3, T4, T5, bool>> expression);
ISugarQueryable<T> Where<T2, T3, T4, T5, T6>(Expression<Func<T2, T3, T4, T5, T6, bool>> expression);
ISugarQueryable<T> Having(Expression<Func<T, bool>> expression);
ISugarQueryable<T> Having(string whereString, object whereObj = null);
@@ -36,11 +36,11 @@ namespace SqlSugar
ISugarQueryable<T> Having<T2, T3, T4, T5, T6>(Expression<Func<T2, T3, T4, T5, T6, bool>> expression);
ISugarQueryable<T> WhereIF(bool isWhere, Expression<Func<T, bool>> expression);
ISugarQueryable<T> WhereIF(bool isWhere,string whereString, object whereObj = null);
ISugarQueryable<T> WhereIF(bool isWhere, string whereString, object whereObj = null);
ISugarQueryable<T> WhereIF<T2>(bool isWhere, Expression<Func<T2, bool>> expression);
ISugarQueryable<T> WhereIF<T2, T3>(bool isWhere, Expression<Func<T2, T3, bool>> expression);
ISugarQueryable<T> WhereIF<T2, T3, T4>(bool isWhere, Expression<Func<T2, T3, T4, bool>> expression);
ISugarQueryable<T> WhereIF<T2, T3, T4, T5>(bool isWhere, Expression<Func<T2, T3, T4, T5, bool>> expression) ;
ISugarQueryable<T> WhereIF<T2, T3, T4, T5>(bool isWhere, Expression<Func<T2, T3, T4, T5, bool>> expression);
ISugarQueryable<T> WhereIF<T2, T3, T4, T5, T6>(bool isWhere, Expression<Func<T2, T3, T4, T5, T6, bool>> expression);
ISugarQueryable<T> In(params object[] pkValues);
@@ -67,12 +67,12 @@ namespace SqlSugar
bool Any(Expression<Func<T, bool>> expression);
bool Any();
ISugarQueryable<TResult> Select<T2, TResult>(Expression<Func<T2, TResult>> expression) ;
ISugarQueryable<TResult> Select<T2, T3, TResult>(Expression<Func<T2, T3, TResult>> expression) ;
ISugarQueryable<TResult> Select<T2, TResult>(Expression<Func<T2, TResult>> expression);
ISugarQueryable<TResult> Select<T2, T3, TResult>(Expression<Func<T2, T3, TResult>> expression);
ISugarQueryable<TResult> Select<T2, T3, T4, TResult>(Expression<Func<T2, T3, T4, TResult>> expression);
ISugarQueryable<TResult> Select<T2, T3, T4, T5, TResult>(Expression<Func<T2, T3, T4, T5, TResult>> expression);
ISugarQueryable<TResult> Select<T2, T3, T4, T5,T6, TResult>(Expression<Func<T2, T3, T4, T5,T6, TResult>> expression) ;
ISugarQueryable<TResult> Select<T2, T3, T4, T5, T6,T7, TResult>(Expression<Func<T2, T3, T4, T5, T6,T7, TResult>> expression) ;
ISugarQueryable<TResult> Select<T2, T3, T4, T5, T6, TResult>(Expression<Func<T2, T3, T4, T5, T6, TResult>> expression);
ISugarQueryable<TResult> Select<T2, T3, T4, T5, T6, T7, TResult>(Expression<Func<T2, T3, T4, T5, T6, T7, TResult>> expression);
ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression);
ISugarQueryable<TResult> Select<TResult>(string select) where TResult : class, new();
ISugarQueryable<T> Select(string select);
@@ -104,7 +104,35 @@ namespace SqlSugar
List<T> ToPageList(int pageIndex, int pageSize);
List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber);
void Clear();
}
public partial interface ISugarQueryable<T, T2> : ISugarQueryable<T>
{
}
public partial interface ISugarQueryable<T, T2, T3> : ISugarQueryable<T>
{
}
public partial interface ISugarQueryable<T, T2, T3, T4> : ISugarQueryable<T>
{
}
//public partial interface ISugarQueryable<T, T2, T3, T4,T5> : ISugarQueryable<T>
//{
//}
//public partial interface ISugarQueryable<T, T2, T3, T4, T5,T6> : ISugarQueryable<T>
//{
//}
//public partial interface ISugarQueryable<T, T2, T3, T4, T5, T6,T7> : ISugarQueryable<T>
//{
//}
//public partial interface ISugarQueryable<T, T2, T3, T4, T5, T6, T7,T8> : ISugarQueryable<T>
//{
//}
}

View File

@@ -10,5 +10,17 @@ namespace SqlSugar
public class SqlServerQueryable<T>:QueryableProvider<T>
{
}
public class SqlServerQueryable<T,T2> : QueryableProvider<T,T2>
{
}
public class SqlServerQueryable<T, T2,T3> : QueryableProvider<T, T2,T3>
{
}
public class SqlServerQueryable<T, T2,T3,T4> : QueryableProvider<T, T2,T3,T4>
{
}
}

View File

@@ -112,5 +112,19 @@ namespace SqlSugar
}
return reval;
}
protected void CreateQueryable<T>(ISugarQueryable<T> result) where T : class, new()
{
var sqlBuilder = InstanceFactory.GetSqlbuilder(CurrentConnectionConfig);
result.Context = this.Context;
result.SqlBuilder = sqlBuilder;
result.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(CurrentConnectionConfig);
result.SqlBuilder.QueryBuilder.Builder = sqlBuilder;
result.SqlBuilder.Context = result.SqlBuilder.QueryBuilder.Context = this.Context;
result.SqlBuilder.QueryBuilder.EntityType = typeof(T);
result.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name;
result.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(CurrentConnectionConfig);
}
}
}

View File

@@ -134,17 +134,10 @@ namespace SqlSugar
public virtual ISugarQueryable<T> Queryable<T>() where T : class, new()
{
var result = InstanceFactory.GetQueryable<T>(base.CurrentConnectionConfig);
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig);
result.Context = this; ;
result.SqlBuilder = sqlBuilder;
result.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig);
result.SqlBuilder.QueryBuilder.Builder = sqlBuilder;
result.SqlBuilder.Context = result.SqlBuilder.QueryBuilder.Context = this;
result.SqlBuilder.QueryBuilder.EntityType = typeof(T);
result.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name;
result.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
base.CreateQueryable(result);
return result;
}
/// <summary>
/// Lambda Query operation
/// </summary>
@@ -164,9 +157,10 @@ namespace SqlSugar
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2>(Expression<Func<T, T2, object[]>> joinExpression) where T : class, new()
public virtual ISugarQueryable<T,T2> Queryable<T, T2>(Expression<Func<T, T2, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
var queryable = InstanceFactory.GetQueryable<T, T2>(base.CurrentConnectionConfig);
base.CreateQueryable(queryable);
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
@@ -174,7 +168,8 @@ namespace SqlSugar
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3>(Expression<Func<T, T2, T3, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
var queryable = InstanceFactory.GetQueryable<T, T2,T3>(base.CurrentConnectionConfig);
base.CreateQueryable(queryable);
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
@@ -182,60 +177,61 @@ namespace SqlSugar
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4>(Expression<Func<T, T2, T3, T4, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
var queryable = InstanceFactory.GetQueryable<T, T2,T3,T4>(base.CurrentConnectionConfig);
base.CreateQueryable(queryable);
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5>(Expression<Func<T, T2, T3, T4, T5, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6>(Expression<Func<T, T2, T3, T4, T5, T6, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7>(Expression<Func<T, T2, T3, T4, T5, T6, T7, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T10, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5>(Expression<Func<T, T2, T3, T4, T5, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6>(Expression<Func<T, T2, T3, T4, T5, T6, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7>(Expression<Func<T, T2, T3, T4, T5, T6, T7, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
//public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T10, object[]>> joinExpression) where T : class, new()
//{
// var queryable = Queryable<T>();
// string shortName = string.Empty;
// queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10));
// queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
// return queryable;
//}
#endregion