Пример #1
0
        /// <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());
            }
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        /// <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));
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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);
        }
Пример #8
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());
        }
Пример #9
0
        /// <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);
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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);
        }