public static List <T> GetList(IDataReader reader) { List <T> list = new List <T>(); EntityBuilder <T> builder = EntityBuilder <T> .CreateBuilder(reader); while (reader.Read()) { T model = default(T); model = builder.Build(reader); list.Add(model); } return(list); }
public static List <T> GetList <T>(PageInfo <T> model) { if (string.IsNullOrWhiteSpace(model.StrSelect)) { model.StrSelect = "*"; } if (model.Config == null) { throw new Exception("Config不能为空!"); } if (string.IsNullOrWhiteSpace(model.StrFrom)) { throw new Exception("StrFrom不能为空!"); } if (string.IsNullOrWhiteSpace(model.StrOrder)) { throw new Exception("StrOrder不能为空!"); } var getModel = model.GetModel; var list = new List <T>(); using (var db = new DbBuilder(model.Config)) { string sql = "select count(1) as tcount from (" + model.StrFrom + ") where 1=1 " + model.StrWhere; var recordCount = (int)new DbBuilder(model.Config).GetSingle(sql, model.Parameters); sql = SqlHelper.GetSqlString(model.StrFrom, model.PageSize, model.PageIndex, recordCount, "*", model.StrWhere, model.StrOrder, model.Config); var reader = db.GetDataReader(sql, model.Parameters); if (getModel != null) { while (reader.Read()) { list.Add(getModel(reader)); } } else { var builder = EntityBuilder <T> .CreateBuilder(reader); while (reader.Read()) { list.Add(builder.Build(reader)); } } } return(list); }
public BaseMapper <T> SortAsc <TResult>(Expression <Func <T, TResult> > field) { if (_SortBuilder == null) { _SortBuilder = new StringBuilder(); } var fieldName = EntityBuilder.GetPropertyName <T, TResult>(field); if (_isOrderBy == false) { _SortBuilder.Append(string.Concat(" [", fieldName, "] asc")); _isOrderBy = true; } else { _SortBuilder.Append(string.Concat(",[", fieldName, "] asc")); } return(this); }
public static EntityBuilder <T> CreateBuilder(IDataRecord dataRecord) { EntityBuilder <T> dynamicBuilder = new EntityBuilder <T>(); DynamicMethod method = new DynamicMethod("DynamicCreate", typeof(T), new Type[] { 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++) { PropertyInfo propertyInfo = typeof(T).GetProperty(dataRecord.GetName(i)); Label endIfLabel = generator.DefineLabel(); if (propertyInfo != null && propertyInfo.GetSetMethod() != null) { 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); }
public string ExpField <TResult>(Expression <Func <T, TResult> > field) { return(EntityBuilder.GetPropertyName <T, TResult>(field)); }