/// <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)); }
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); } }