public static object ResultScalar(IAncestorResult result) { object value = null; if (result.ReturnDataTable != null) { if (result.ReturnDataTable.Rows.Count > 0) { return(result.ReturnDataTable.Rows[0][0]); } } else if (result.DataList != null) { if (result.DataList.Count > 0) { var item = result.DataList[0]; var dataType = item.GetType(); var firstProperty = dataType.GetProperties().FirstOrDefault(); if (firstProperty != null) { return(firstProperty.GetValue(item, null)); } } } return(value); }
public static T ResultScalar <T>(this IAncestorResult result, T defaultValue = default(T)) { try { return((T)AncestorResultHelper.ResultScalar(result)); } catch { return(defaultValue); } }
public static List <T> ResultScalarList <T>(IAncestorResult result) { var list = new List <T>(); if (result.ReturnDataTable != null) { if (result.ReturnDataTable.Rows.Count > 0) { var flag = false; TypeConverter converter = null; foreach (DataRow row in result.ReturnDataTable.Rows) { var value = row[0]; if (!flag) { if (value != null && !typeof(T).IsAssignableFrom(value.GetType())) { converter = TypeDescriptor.GetConverter(typeof(T)); } flag = true; } if (converter != null) { value = converter.ConvertFromString(Convert.ToString(value)); } list.Add((T)value); } } } else if (result.DataList != null) { if (result.DataList.Count > 0) { foreach (var item in result.DataList) { list.Add((T)item); } } } return(list); }
public static Tuple <T1, T2> ResultFirst <T1, T2>(this IAncestorResult result, Func <Tuple <T1, T2> > objectFactory = null, ResultListMode?mode = null, Encoding hardwordEncoding = null) { var m = mode ?? (objectFactory != null ? ResultListMode.Value : ResultListMode.All); return((Tuple <T1, T2>)AncestorResultHelper.ResultFirst(result, new Type[] { typeof(T1), typeof(T2) }, objectFactory, m, hardwordEncoding)); }
public static T ResultFirst <T>(this IAncestorResult result, Func <T> objectFactory, ResultListMode?mode = null, Encoding hardwordEncoding = null) { var m = mode ?? (objectFactory != null ? ResultListMode.Value : ResultListMode.All); return((T)AncestorResultHelper.ResultFirst(result, typeof(T), objectFactory, m, hardwordEncoding)); }
public static object ResultFirst(IAncestorResult result, Type[] dataTypes, Delegate objectFactory, ResultListMode mode, Encoding hardwordEncoding) { var list = InternalResultList(result, dataTypes, objectFactory, true, mode, hardwordEncoding); return(list.Count == 0 ? null : list[0]); }
internal static IList InternalResultList(IAncestorResult result, Type[] dataTypes, Delegate objectFactory, bool firstOnly, ResultListMode mode, Encoding hardwordEncoding) { var baseTupleType = Type.GetType("System.Tuple`" + dataTypes.Length); var tupleType = baseTupleType.MakeGenericType(dataTypes); IList list = Activator.CreateInstance(typeof(List <>).MakeGenericType(tupleType)) as IList; switch (result.DataType) { case AncestorResultDataType.List: if (result.DataList.Count > 0) // if has item than find anonymouse creation info { var hdMap = new Dictionary <Type, IDictionary <PropertyInfo, HardWordAttribute> >(); foreach (var dataType in dataTypes) { var hds = HardWordManager.Get(dataType); hdMap.Add(dataType, hds); } var map = new Dictionary <Type, Dictionary <PropertyInfo, Tuple <PropertyInfo, Func <object, object> > > >(); var itemList = CastToItem(result.DataList, o => { var args = new object[dataTypes.Length]; for (var i = 0; i < dataTypes.Length; i++) { Dictionary <PropertyInfo, Tuple <PropertyInfo, Func <object, object> > > propertyMap; map.TryGetValue(dataTypes[i], out propertyMap); var flgPropertyMapEmpty = propertyMap == null; IDictionary <PropertyInfo, HardWordAttribute> hds; hdMap.TryGetValue(dataTypes[i], out hds); var ins = Activator.CreateInstance(dataTypes[i]); DeepCloneItem(o, ins, ref propertyMap, hds, mode, hardwordEncoding); if (flgPropertyMapEmpty) { map.Add(dataTypes[i], propertyMap); } args[i] = ins; } return(Activator.CreateInstance(tupleType, args)); }); foreach (var item in itemList) { list.Add(item); if (firstOnly) { break; } } } break; case AncestorResultDataType.DataTable: var rowObjectFactory = objectFactory as Func <DataRow, object>; var listArray = new IEnumerable[dataTypes.Length]; for (var i = 0; i < dataTypes.Length; i++) { listArray[i] = TableToCollection(result.ReturnDataTable, dataTypes[i], rowObjectFactory, firstOnly, mode, hardwordEncoding); } var enumerators = listArray.Select(r => r.GetEnumerator()).ToArray(); while (enumerators.All(r => r.MoveNext())) { var listItem = Activator.CreateInstance(tupleType, enumerators.Select(r => r.Current).ToArray()); list.Add(listItem); } break; } return(list); }
internal static IList InternalResultList(IAncestorResult result, Type dataType, Delegate objectFactory, bool firstOnly, ResultListMode mode, Encoding hardwordEncoding) { IList list = Activator.CreateInstance(typeof(List <>).MakeGenericType(dataType)) as IList; var hds = HardWordManager.Get(dataType); var factory = objectFactory as Func <object>; switch (result.DataType) { case AncestorResultDataType.List: if (InternalHelper.IsAnonymousType(dataType) && factory != null) { if (result.DataList.Count > 0) // if has item than find anonymouse creation info { var targetProperties = dataType.GetProperties(); var sourceProperties = result.DataList[0].GetType().GetProperties(); var resolvers = new List <Func <object, object> >(); foreach (var targetProperty in targetProperties) { var property = sourceProperties.FirstOrDefault(p => p.Name == targetProperty.Name && p.PropertyType == targetProperty.PropertyType); if (property != null) { resolvers.Add(o => property.GetValue(o, null)); } else if (targetProperty.PropertyType.IsValueType) { resolvers.Add(o => Activator.CreateInstance(targetProperty.PropertyType)); } else { resolvers.Add(o => null); } } foreach (var item in CloneByCunstructure(result.DataList, dataType, resolvers)) { list.Add(item); if (firstOnly) { break; } } } } else { Dictionary <PropertyInfo, Tuple <PropertyInfo, Func <object, object> > > propertyMap = null; if (factory == null) { factory = () => Activator.CreateInstance(dataType); } foreach (var item in CastToItem(result.DataList, o => DeepCloneItem(o, factory(), ref propertyMap, hds, mode, hardwordEncoding))) { list.Add(item); if (firstOnly) { break; } } } break; case AncestorResultDataType.DataTable: var rowObjectFactory = objectFactory as Func <DataRow, object>; if (rowObjectFactory == null && factory != null) { rowObjectFactory = row => factory(); } foreach (var item in TableToCollection(result.ReturnDataTable, dataType, rowObjectFactory, firstOnly, mode, hardwordEncoding)) { list.Add(item); } break; } return(list); }
public static IList ResultList(IAncestorResult result, Type[] dataTypes, Delegate objectFactory, ResultListMode mode, Encoding hardwordEncoding) { return(InternalResultList(result, dataTypes, objectFactory, false, mode, hardwordEncoding)); }