예제 #1
0
        public TResult Execute <TResult>(Expression expression)
        {
            object obj2;
            var    base2  = ProviderFactory.CreateProvider(dc.dbconn(string.Empty).Reader.DatabaseType);
            var    result = ParseExpression(expression);
            var    type   = typeof(TResult);

            //SqlExecutorBase base3 = base2.CreateSqlExecutor();
            if ((expression.NodeType != ExpressionType.Call) || !type.IsValueType)
            {
                var flag = false;
                if (type.IsGenericType)
                {
                    var reader = ModelOpretion.SearchDataRetunDataTable(result.CommandText,
                                                                        result.SqlQueryParameters, null); //base3.ExecuteReader(result.CommandText, result.Parameters);
                    if (type.GetGenericTypeDefinition() == ReflectorConsts.IEnumerableType)
                    {
                        var   objectType = type.GetGenericArguments()[0];
                        IList list       = null;
                        try
                        {
                            list = EntityMapper.Map(objectType, reader, base2.ObjectPropertyConvertType);
                        }
                        catch
                        {
                            throw new Exception("转化成TResult失败");
                        }


                        return((TResult)list);
                    }
                    if (typeof(Nullable <>).IsAssignableFrom(type))
                    {
                        flag = true;
                    }
                    if (!flag)
                    {
                        throw new Exception();
                    }
                }
                if (type.IsValueType | flag)
                {
                    var obj = ModelOpretion.ScalarBache(result.CommandText, result.SqlQueryParameters, null);
                    if (obj == null)
                    {
                        return(default(TResult));
                    }


                    if (obj == DBNull.Value)
                    {
                        return(default(TResult));
                    }
                    return((TResult)Convert.ChangeType(obj, type));
                }
                if (!EntityConfigurationManager.IsEntity(type))
                {
                    throw new Exception();
                }
                var dataReader = ModelOpretion.SearchDataRetunDataTable(result.CommandText,
                                                                        result.SqlQueryParameters, null);
                IList list2 = null;
                try
                {
                    list2 = EntityMapper.Map(type, dataReader, base2.ObjectPropertyConvertType);
                }
                catch (Exception ex)
                {
                    throw new Exception("TResult:转化成实体失败.");
                }
                finally
                {
                }
                if (list2.Count <= 0)
                {
                    return(default(TResult));
                }
                var entity = list2[0];

                return((TResult)entity);
            }
            //var name = ((MethodCallExpression) expression).Method.Name;
            //if (name != "Any")
            //{
            //    if ((name != "Delete") && (name != "Update"))
            //    {
            //        if ((name != "Average") && (name != "Sum") && (name != "Count"))
            //        {
            //            throw new Exception();
            //        }
            //        obj2 = base3.ExecuteScalar(result.CommandText, result.Parameters);
            //        if (obj2 == DBNull.Value)
            //        {
            //            return default(TResult);
            //        }
            //        var converter1 = new BaseTypeConverter(obj2, type);
            //        converter1.Process();
            //        return (TResult) converter1.Result;
            //    }
            //}
            //else
            //{
            //    DataSet set = base3.ExecuteDataSet(result.CommandText, result.Parameters);
            //    obj2 = set.Tables.Count <= 0 ? 0 : (object) (set.Tables[0].Rows.Count > 0);
            //    return (TResult) obj2;
            //}

            obj2 = ModelOpretion.ScalarBache(result.CommandText,
                                             result.SqlQueryParameters, null);
            return((TResult)obj2);
        }
예제 #2
0
 public static TResult Map <TSource, TResult>(TSource source)
 {
     return(EntityMapper.Map <TSource, TResult>(source));
 }