public SqlBuilderBase CreateSqlBuilder() { if (_providerTypes == null) { _providerTypes = (from x in Assembly.GetExecutingAssembly().GetTypes() where x.BaseType == typeof(SqlBuilderBase) select x).ToList(); } var typeName = _provider.DatabaseType + ".SqlBuilder"; var source = from x in _providerTypes where x.FullName.EndsWith(typeName) select x; if (source.Count() > 1) { throw new NotSupportedException("找到了多个包含" + typeName + "的提供者类"); } var type = source.FirstOrDefault(); if (type == null) { throw new NotSupportedException("未找到提供者类:" + typeName); } object[] parameters = { _provider }; return((SqlBuilderBase)ExpressionReflector.CreateInstance(type, ObjectPropertyConvertType.Cast, parameters)); }
public BuilderFactory CreateSqlBuilderFactory() { if (string.IsNullOrWhiteSpace(ConfigManager.SqlBuilder)) { return(new BuilderFactory(this)); } if (_type == null) { char[] separator = { ',' }; var assInfos = ConfigManager.SqlBuilder.Split(separator); _type = Assembly.Load(assInfos[1]).GetTypes().FirstOrDefault(x => x.FullName == assInfos[0]); } object[] parameters = { this }; return ((BuilderFactory)ExpressionReflector.CreateInstance(_type, ObjectPropertyConvertType.Cast, parameters)); }
public static IList Map(Type objectType, DataSet ds, ObjectPropertyConvertType convertType) { var list = (IList)Activator.CreateInstance(ReflectorConsts.ListObjectType); var setters = ExpressionReflector.GetSetters(objectType); var properties = ExpressionReflector.GetProperties(objectType); var table1 = ds.Tables[0]; foreach (DataRow row in ds.Tables[0].Rows) { object obj2 = null; if (objectType.IsSealed) { var list2 = new List <object>(); foreach (DataColumn column in ds.Tables[0].Columns) { var item = row[column]; if (item == DBNull.Value) { item = null; } list2.Add(item); } if (TypeHelper.IsValueType(objectType)) { obj2 = list2[0]; } else { obj2 = ExpressionReflector.CreateInstance(objectType, convertType, list2.ToArray()); } } else { obj2 = ExpressionReflector.CreateInstance(objectType, convertType); foreach (DataColumn column2 in ds.Tables[0].Columns) { var obj4 = row[column2]; if (obj4 != DBNull.Value) { var info = properties[column2.ColumnName]; if (info != null) { var propertyType = info.PropertyType; var underlyingType = Nullable.GetUnderlyingType(propertyType); if (underlyingType == null) { underlyingType = propertyType; } if (underlyingType.IsEnum) { obj4 = Enum.Parse(underlyingType, Convert.ToString(obj4)); } else { obj4 = Convert.ChangeType(obj4, underlyingType); } setters[column2.ColumnName](obj2, obj4); } } } } list.Add(obj2); } return(list); }