1. 程式人生 > 其它 >sqlsugar入門(7)-IStringSugar(非泛型增刪改查)

sqlsugar入門(7)-IStringSugar(非泛型增刪改查)

1、構建查詢需要反射的方法

實現的核心思路就是反射。
然而泛型方法想要反射獲取指定的方法通過指定引數型別不能直接的獲取到。所以寫了一個SqlFuncAssembly儲存有用到的
泛型方法。例如反射一個兩表聯查用引數匹配太費勁:var queryable1 = ssc.GetType().GetMethods().Where(o => o.Name == "Queryable" && o.GetGenericArguments().Length == 2 && o.GetParameters()[0].Member.ToString() == "SqlSugar.ISugarQueryable`2[T,T2] Queryable[T,T2](System.Linq.Expressions.Expression`1[System.Func`3[T,T2,System.Object[]]])").ToList()[0];
寫個通用的匹配方法,var querymethods = SqlFuncAssembly.SqlSugarClientMethods.Where(o => o.Name == "Queryable" && o.GenericArgumentCount == tablenames.Count && o.IsFunc && o.SugarAssemblyTypeList.Last().FuncTypeList.Last().Name == typeof(object[]).Name).Select(o => o.MethodInfo).ToList();實現方法在SqlFuncAssembly類中。

2、照搬Delete,Update,Query,Insert中想要的方法例如Queryable,Select等。反射實現這些方法。

3、組合所有實現的介面到統一的介面中。

4、查詢示例

SqlFuncAssembly.Load("TestModel.dll");
            var ssc1 = SqlFuncEx.GetDB("server=127.0.0.1;database=SqlSugar4XTest;uid=sa;pwd=123456", SqlSugar.DbType.SqlServer);

            StringSugar stringQueryable 
= new StringSugar(ssc1); var tables = new List<string>() { "Order", "OrderDetail" }; var joins = new List<(string, string, JoinType)>() { ("Order.Id", "OrderDetail.OrderId", JoinType.Left) }; ConditionalModel ConditionalModel = new ConditionalModel(); ConditionalModel.FieldName
= "id"; ConditionalModel.FieldValue = "2"; ConditionalModel.ConditionalType = ConditionalType.Equal; var list113 = stringQueryable.Queryable(tables).Join(joins).Where(new List<IConditionalModel>() { ConditionalModel }).Where("id = 2").ToList(); var list112 = stringQueryable.Queryable(tables).Join(joins).Where("id = 2").ToList(); var list111 = stringQueryable.Queryable("Order").Where("id = 2").ToList(); StringSugar StringSugar = new StringSugar(ssc1); //var ww = StringSugar.Updateable(Order).WhereColumns("Id").ExecuteCommand(); var wwlist = StringSugar.Queryable("Order").Where("id = 10").ToList();

Demo地址:https://gitee.com/xuanyun2018/sqlsugardemo.git