Exemple #1
0
        /// <summary>
        ///  获取单项扩展
        /// </summary>
        /// <typeparam name="TType"></typeparam>
        /// <param name="con"></param>
        /// <param name="mo"></param>
        /// <param name="whereExp"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static async Task <TType> Get <TType>(this IDbConnection con, string tableName = null, TType mo = default(TType), Expression <Func <TType, bool> > whereExp = null)
        {
            if (string.IsNullOrEmpty(tableName))
            {
                tableName = typeof(TType).Name;
            }

            var sqlVisitor = new SqlExpressionVisitor();
            var whereSql   = VisitWhereExpress(sqlVisitor, whereExp);

            var sqlStr = string.Concat("SELECT * FROM ", tableName, whereSql);

            var opeInfo  = GetOrmOperateCache <TType>(con.ConnectionString, sqlStr, tableName, sqlVisitor.Properties.Select(e => e.Value));
            var paraDics = opeInfo.ParaFunc?.Invoke(mo) ?? new Dictionary <string, object>();

            foreach (var p in sqlVisitor.Parameters)
            {
                paraDics.Add(p.Key, p.Value);
            }

            return(await con.QueryFirstOrDefaultAsync <TType>(opeInfo.Sql, paraDics));
        }
Exemple #2
0
        private static void GetUpdateAllSql <TType>(string tableName, StringBuilder sqlStr, SqlExpressionVisitor visitor)
        {
            sqlStr.Append(tableName).Append(" SET ");
            var pros = typeof(TType).GetProperties();

            var isStart = false;

            foreach (var pro in pros)
            {
                if (visitor.Properties.ContainsKey(pro.Name) ||
                    pro.GetCustomAttribute <AutoColumnAttribute>() != null)
                {
                    continue;
                }

                sqlStr.Append(isStart ? "," : string.Empty)
                .Append("`").Append(pro.Name).Append("`").Append("=").Append("@").Append(pro.Name);

                if (!isStart)
                {
                    isStart = true;
                }

                visitor.Properties.Add(pro.Name, pro);
            }
        }