/// <summary> /// 查询单条记录 /// </summary> /// <param name="ExpWhere">lamda表达式</param> /// <param name="SqlOrderBy">取值排序字段,如:Id Asc,CreateTime Desc</param> /// <param name="UseReadonlySource">是否实用只读数据源,true-是,false-否</param> /// <returns></returns> public static T Get(Expression <Func <T, bool> > ExpWhere, string SqlOrderBy, bool UseReadonlySource = true) { ResolveExpress re = new ResolveExpress(); re.ResolveExpression(re, ExpWhere); string SqlWhere = "1=1" + re.SqlWhere; object[] SqlParams = re.SqlParams.ToArray(); string SqlText = SqlGenerator.SQLBUILDER_Get(DB.ORM_TabInfo, SqlWhere, SqlOrderBy); Data.DBHelper db = new Data.DBHelper(DB.ORM_TabInfo.ORMConnectionMark, UseReadonlySource); Data.Common.DataTable dt = db.ExecTextDataTable(SqlText, SqlParams); if (dt != null && dt.Rows.Count > 0) { DataRow dr = dt.Rows[0]; DynamicBuilder <T> DyBuilder = DynamicBuilder <T> .CreateBuilder(dr); T Model = DyBuilder.Build(dr); ModelBase <T> TempModel = Model as ModelBase <T>; TempModel.ModifiedColumns.Clear(); return(Model); } else { return(new T()); } }
/// <summary> /// 获取最小值 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">查询字段 (例如:it=>it.fieldName)</param> /// <returns>object</returns> public static object Min <T>(this Queryable <T> queryable, Expression <Func <T, object> > expression) { var re = new ResolveExpress(); var minField = re.GetExpressionRightField(expression, queryable.DB); return(Min <T, object>(queryable, minField)); }
/// <summary> /// 条件筛选 ( 例如:expression 为 it=>it.id, inValues值为 new string[]{"1" ,"2"} 生成的SQL就是 id in('1','2') ) /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <typeparam name="FieldType">In的字段类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">In的字段(例如:it=>it.id)</param> /// <param name="inValues">In的值的集合</param> /// <returns>Queryable</returns> public static Queryable <T> In <T, FieldType>(this Queryable <T> queryable, Expression <Func <T, object> > expression, List <FieldType> inValues) { var re = new ResolveExpress(); var InFieldName = re.GetExpressionRightField(expression, queryable.DB); return(In(queryable, InFieldName, inValues)); }
/// <summary> /// 分组 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">分组字段 (例如:it=>it.fieldName)</param> /// <returns>Queryable</returns> public static Queryable <T> GroupBy <T>(this Queryable <T> queryable, Expression <Func <T, object> > expression) { var re = new ResolveExpress(); var field = re.GetExpressionRightField(expression, queryable.DB); var pre = queryable.GroupByValue.IsValuable() ? "," : ""; queryable.GroupByValue += pre + field; return(queryable); }
/// <summary> /// 排序 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <typeparam name="T2">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">例如 (s1,s2)=>s1.id,相当于 order by s1.id</param> /// <param name="type">排序类型</param> /// <returns>Queryable</returns> public static Queryable <T> OrderBy <T, T2>(this Queryable <T> queryable, Expression <Func <T, T2, object> > expression, OrderByType type = OrderByType.asc) { var re = new ResolveExpress(); var field = re.GetExpressionRightFieldByNT(expression, queryable.DB); var pre = queryable.OrderByValue.IsValuable() ? "," : ""; queryable.OrderByValue += pre + field + " " + type.ToString().ToUpper(); return(queryable); }
/// <summary> /// 条件筛选 ( 例如:InFieldName 为 id, inValues 值为 new string[]{"1" ,"2"} 生成的SQL就是 id in('1','2') ) /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <typeparam name="FieldType">In的字段类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="InFieldName">In的字段名称</param> /// <param name="inValues">In的值的数组集合</param> /// <returns>Queryable</returns> public static Queryable <T> In <T, FieldType>(this Queryable <T> queryable, string InFieldName, params FieldType[] inValues) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; var re = new ResolveExpress(queryable.WhereIndex); queryable.WhereValue.Add(string.Format(" AND {0} IN ({1})", InFieldName, inValues.ToJoinSqlInVal())); return(queryable); }
/// <summary> /// 确定序列是否包含任何元素。 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>count>0返回true</returns> public static bool Any <T>(this Queryable <T> queryable, Expression <Func <T, bool> > expression) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; var re = new ResolveExpress(queryable.WhereIndex); re.ResolveExpression(re, expression, queryable.DB); queryable.WhereValue.Add(re.SqlWhere); queryable.Params.AddRange(re.Paras); return(queryable.Count() > 0); }
/// <summary> /// 返回序列的唯一元素;如果该序列并非恰好包含一个元素,否则返回null。 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>T</returns> public static T SingleOrDefault <T>(this Queryable <T> queryable, Expression <Func <T, bool> > expression) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; var re = new ResolveExpress(queryable.WhereIndex); re.ResolveExpression(re, expression, queryable.DB); queryable.WhereValue.Add(re.SqlWhere); queryable.Params.AddRange(re.Paras); return(queryable.ToList().SingleOrDefault()); }
/// <summary> /// 条件筛选 /// </summary> /// <typeparam name="T">表实体类型</typeparam> /// <typeparam name="T2">表实体类型</typeparam> /// <typeparam name="T3">表实体类型</typeparam> /// <typeparam name="T4">表实体类型</typeparam> /// <typeparam name="T5">表实体类型</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">表达式条件</param> /// <returns>Queryable</returns> public static Queryable <T> Where <T, T2, T3, T4, T5>(this Queryable <T> queryable, Expression <Func <T, T2, T3, T4, T5, bool> > expression) { var type = queryable.Type; queryable.WhereIndex = queryable.WhereIndex + 100; var re = new ResolveExpress(queryable.WhereIndex); re.Type = ResolveExpressType.nT; re.ResolveExpression(re, expression, queryable.DB); queryable.Params.AddRange(re.Paras); queryable.WhereValue.Add(re.SqlWhere); return(queryable); }
/// <summary> /// 联表查询 /// </summary> /// <typeparam name="T">第一个表的对象</typeparam> /// <typeparam name="T2">联接表的对象</typeparam> /// <typeparam name="T3">联接表的对象</typeparam> /// <param name="queryable">查询对象</param> /// <param name="expression">条件表达式</param> /// <param name="type">Join的类型</param> /// <returns>Queryable</returns> public static Queryable <T> JoinTable <T, T2, T3>(this Queryable <T> queryable, Expression <Func <T, T2, T3, object> > expression, JoinType type = JoinType.LEFT) { queryable.DB.InitAttributes <T3>(); var re = new ResolveExpress(); queryable.WhereIndex = queryable.WhereIndex + 100; re.Type = ResolveExpressType.nT; var exLeftStr = Regex.Match(expression.ToString(), @"\((.+?)\).+").Groups[1].Value; var exLeftArray = exLeftStr.Split(','); var shortName1 = exLeftArray[1]; var shortName2 = exLeftArray[2]; re.ResolveExpression(re, expression, queryable.DB); var joinTypeName = type.ToString(); string joinTableName = null; if (queryable.DB._mappingTableList.IsValuable()) { //别名表 if (queryable.DB._mappingTableList.IsValuable()) { var name = typeof(T3).Name; if (queryable.DB._mappingTableList.Any(it => it.Key == name)) { joinTableName = queryable.DB._mappingTableList.First(it => it.Key == name).Value; } } } if (joinTableName.IsNullOrEmpty()) { joinTableName = typeof(T3).Name; } var joinStr = string.Format(" {0} JOIN {1} {2} ON {3} ", /*0*/ queryable.JoinTableValue.Count == 0 ? (" " + shortName1 + " " + joinTypeName) : joinTypeName, /*1*/ joinTableName.GetTranslationSqlName(), /*2*/ shortName2, /*3*/ re.SqlWhere.Trim().TrimStart('A').TrimStart('N').TrimStart('D') ); queryable.JoinTableValue.Add(joinStr); queryable.Params.AddRange(re.Paras); return(queryable); }
protected void Page_Load(object sender, EventArgs e) { PerformanceTest pt = new PerformanceTest(); pt.SetCount(100000);//设置循环次数 Models.Student ss = new Models.Student() { id = 1 }; pt.Execute(i => { ResolveExpress r = new ResolveExpress(); Expression <Func <Models.InsertTest, bool> > func = x => x.id > ss.id; r.ResolveExpression(r, func); }, m => { }, "lambda"); //输出测试页面 GridView gv = new GridView(); gv.DataSource = pt.GetChartSource(); gv.DataBind(); Form.Controls.Add(gv); }