SubQueryContextInfo GetSubQueryContext(IBuildContext context, MethodCallExpression expr) { List <SubQueryContextInfo> sbi; if (!_buildContextCache.TryGetValue(context, out sbi)) { _buildContextCache[context] = sbi = new List <SubQueryContextInfo>(); } foreach (var item in sbi) { if (expr.EqualsTo(item.Method, new Dictionary <Expression, QueryableAccessor>())) { return(item); } } var ctx = GetSubQuery(context, expr); var info = new SubQueryContextInfo { Method = expr, Context = ctx }; sbi.Add(info); return(info); }