Пример #1
0
        /// <summary>
        /// 表达式树查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="predicate"></param>
        /// <returns></returns>
        public List <T> ExpressQuery <T>(Expression <Func <T, bool> > predicate)
        {
            try
            {
                ConditionBuilderVisitor visitor = new ConditionBuilderVisitor();
                visitor.Visit(predicate);
                string sqlStr = visitor.ToExpressionString();

                Type   modelType = typeof(T);
                string sqlString = $"select * from [{modelType.Name}] where 1=1";

                if (!string.IsNullOrEmpty(sqlStr))
                {
                    sqlString += " AND " + sqlStr;
                }

                return(client.ExcuteSqlDelegate <List <T> >(sqlString, cmd =>
                {
                    SqlDataReader reader = cmd.ExecuteReader();
                    var getData = client.GetDataReader <T>(reader);
                    return getData;
                }, null));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }