コード例 #1
0
        private Func <T1, TVal[]> CreateExpression(IEnumerable <string> fields)
        {
            var t1param = EE.Param <T1>("obj");
            var elist   = fields.Select(f => t1param.Dot(f)).Cast <Expression>();

            if (typeof(TVal) == typeof(object))
            {
                elist = elist.Select(e => EE.Box(e));
            }
            var resultArr = Expression.NewArrayInit(typeof(TVal), elist);
            var l         = Expression.Lambda <Func <T1, TVal[]> >(resultArr, t1param);

            return(l.Compile());
        }
コード例 #2
0
        private Func <T1, T2, DifferReturnValueType[]> CreateExpression(IEnumerable <string> fields)
        {
            var t1param     = EE.Param <T1>("left");
            var t2param     = EE.Param <T2>("right");
            var NULL        = EE.Val <DifferReturnValueType>(null);
            var TupleCreate = EE.Method(() => Tuple.Create <string, object>("", null));
            var cmplist2    = fields.Select(f =>
                                            Expression.Condition(t1param.Dot(f).IsEq(t2param.Dot(f)),
                                                                 NULL,
                                                                 Expression.Call(TupleCreate, EE.Val(f), EE.Box(t2param.Dot(f)))));
            var resultArr = Expression.NewArrayInit(typeof(DifferReturnValueType), cmplist2);

            var l = Expression.Lambda <Func <T1, T2, DifferReturnValueType[]> >(resultArr, t1param, t2param);

            return(l.Compile());
        }