Beispiel #1
0
 public Enumerator(MemberExpressionCacheKey key)
 {
     Current           = null;
     _members          = key.Members;
     _memberExpression = key.MemberExpression;
     _index            = -1;
 }
Beispiel #2
0
            private static Func <TModel, object> CompileForChainedMemberAccess(
                Expression <Func <TModel, TResult> > expression,
                MemberExpression memberExpression)
            {
                // Input: () => m.Member1.Member2
                // Output: () => (m == null || m.Member1 == null) ? null : m.Member1.Member2
                var key = new MemberExpressionCacheKey(typeof(TModel), memberExpression);

                if (_chainedMemberAccessCache.TryGetValue(key, out var result))
                {
                    return(result);
                }

                var cacheableKey = key.MakeCacheable();

                result = _chainedMemberAccessCache.GetOrAdd(cacheableKey, Rewrite(expression, memberExpression));
                return(result);
            }