Exemplo n.º 1
0
        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);
     }
 }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 6
0
        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]);
        }
Exemplo n.º 7
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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 public static IList ResultList(IAncestorResult result, Type[] dataTypes, Delegate objectFactory, ResultListMode mode, Encoding hardwordEncoding)
 {
     return(InternalResultList(result, dataTypes, objectFactory, false, mode, hardwordEncoding));
 }