/// <summary>
 /// 查询单个实体
 /// </summary>
 /// <param name="item">框架实体</param>
 /// <returns>单个对象</returns>
 public T SelectModel(FrameWorkItem item)
 {
     try
     {
         var sql = DalAid.CreatePageQuerySql(item.Sql, null, dbType);
         using (var connection = GetDbConnection(item.ConnectionString))
         {
             using (var cmd = GetDbCommand(sql, connection, item.SqlParam))
             {
                 using (IDataReader dr = cmd.ExecuteReader())
                 {
                     if (dr != null && dr.Read())
                     {
                         return(DynamicBuilderEntity <T> .CreateBuilder(dr).Build(dr));
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
     finally
     {
     }
     return(default(T));
 }
        /// <summary>
        /// 查询集合,带分页
        /// </summary>
        /// <param name="item">框架实体</param>
        /// <param name="isAutoParam">是否自动匹配参数</param>
        /// <param name="dp">分页对象</param>
        /// <returns>对象集合</returns>
        public List <To> SelectList <To>(FrameWorkItem item, DataPage dp = null, bool isAutoParam = false) where To : new()
        {
            try
            {
                var sql   = DalAid.CreatePageQuerySql(item.Sql, dp, dbType);
                var param = item.SqlParam;
                if (isAutoParam)
                {
                    var where = GetWhere(item.SqlParam);
                    sql      += where.Item1;
                    param     = where.Item2;
                }
                using (var connection = GetDbConnection(item.ConnectionString))
                {
                    using (var cmd = GetDbCommand(sql, connection, param))
                    {
                        using (IDataReader dr = cmd.ExecuteReader())
                        {
                            List <To> list = new List <To>();
                            if (dp != null && dp.PageSize > 0)
                            {
                                int result = GetResult <int>(string.Format("SELECT COUNT(1) FROM ({0}) a", item.Sql), item.ConnectionString, item.SqlParam);
                                dp.RowCount = result;
                            }
                            var builders = DynamicBuilderEntity <To> .CreateBuilder(dr);

                            while (dr != null && dr.Read())
                            {
                                To tempT = new To();
                                tempT = builders.Build(dr);
                                list.Add(tempT);
                            }
                            return(list);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
        }
Example #3
0
        /// <summary>
        /// 建立过程
        /// </summary>
        /// <param name="dataRecord">取数据流字段</param>
        /// <returns></returns>
        public static DynamicBuilderEntity <T> CreateBuilder(IDataRecord dataRecord)
        {
            var dynamicBuilder = new DynamicBuilderEntity <T>();

            var         method    = new DynamicMethod("DynamicCreateEntity", typeof(T), new[] { typeof(IDataRecord) }, typeof(T), true);
            ILGenerator generator = method.GetILGenerator();

            LocalBuilder result = generator.DeclareLocal(typeof(T));

            generator.Emit(OpCodes.Newobj, typeof(T).GetConstructor(Type.EmptyTypes));
            generator.Emit(OpCodes.Stloc, result);

            for (int i = 0; i < dataRecord.FieldCount; i++)
            {
                var propertyInfo = typeof(T).GetProperty(dataRecord.GetName(i));
                if (propertyInfo == null)
                {
                    continue;
                }
                var endIfLabel = generator.DefineLabel();

                if (propertyInfo.GetSetMethod() == null)
                {
                    continue;
                }
                generator.Emit(OpCodes.Ldarg_0);
                generator.Emit(OpCodes.Ldc_I4, i);
                generator.Emit(OpCodes.Callvirt, isDBNullMethod);
                generator.Emit(OpCodes.Brtrue, endIfLabel);
                generator.Emit(OpCodes.Ldloc, result);
                generator.Emit(OpCodes.Ldarg_0);
                generator.Emit(OpCodes.Ldc_I4, i);
                generator.Emit(OpCodes.Callvirt, getValueMethod);
                generator.Emit(OpCodes.Unbox_Any, dataRecord.GetFieldType(i));
                generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());
                generator.MarkLabel(endIfLabel);
            }
            generator.Emit(OpCodes.Ldloc, result);
            generator.Emit(OpCodes.Ret);

            dynamicBuilder.handler = (Load)method.CreateDelegate(typeof(Load));
            return(dynamicBuilder);
        }