Agregar unión interna a DbScanExpression en Entity Framework Interceptor

Estoy tratando de usar un interceptor Entity Framework CommandTree para agregar un filtro a cada consulta a través de un DbContext.

En aras de la simplicidad, tengo dos tablas, una llamada "Usuario" con dos columnas ("UserId" y "EmailAddress") y otra llamada "TenantUser" con dos columnas ("UserId" y "TenantId").

Cada vez que hay un DbScan de la tabla Usuario, quiero hacer una unión interna contra la tabla TenantUser y filtrar según la columna TenantId.

Hay un proyecto llamadoEntityFramework.Filters eso hace algo en este sentido, pero no admite "combinaciones complejas", que parece ser lo que estoy tratando de hacer.

Siguiendouna demostración de TechEd 2014, Creé un interceptor que utiliza un visitante con el siguiente método para reemplazar DbScanExpressions con un DbJoinExpression. Una vez que eso funcione, planeo envolverlo en una DbFilterExpression para comparar la columna TenantId con una ID conocida.

    public override DbExpression Visit(DbScanExpression expression)
    {
        var table = expression.Target.ElementType as EntityType;
        if (table != null && table.Name == "User")
        {
            return DbExpressionBuilder.InnerJoin(expression, DbExpressionBuilder.Scan(expression.Target), (l, r) =>
                DbExpressionBuilder.Equal(DbExpressionBuilder.Variable(tenantUserIdProperty.TypeUsage, "UserId"),
                    DbExpressionBuilder.Variable(userIdProperty.TypeUsage, "UserId")));
        }

        return base.Visit(expression);
    }

Para probar el código anterior, agregué el interceptor al dbContext y ejecuté el siguiente código:

    dbContext.Users.Select(u => new { u.EmailAddress }).ToList();

Sin embargo, esto da como resultado el siguiente error:

Ninguna propiedad con el nombre 'EmailAddress' es declarada por el tipo 'Transient.rowtype [(l, CodeFirstDatabaseSchema.User (Nullable = True, DefaultValue =)), (r, CodeFirstDatabaseSchema.User (Nullable = True, DefaultValue =))] '.

¿Estoy construyendo DbJoinExpression de forma incorrecta? ¿O me estoy perdiendo algo más?