Expressão dinâmica de construção de linq

Eu preciso criar uma expressão linq dinâmica para uma pesquisa dinâmica. A pesquisa básica está funcionando, mas não funciona com a coleção. Consigo obter o título e o autor do livro, mas não consigo obter o cabeçalho da página necessário. Eu recebo a exceção na linha"left11 = Expression.Property (página1," Título ");". Eu acho que a expressão que eu construí é incapaz de reconhecer a lista. Como isso pode ser possível? Por favor, veja o código abaixo e a exceção do stacktrace.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace XMLStorageAndFilter
{
public class Books
{
    public Books()
    {
        Page = new List<Page>();
    }
    public string Title { get; set; }
    public Author Author { get; set; }
    public List<Page> Page { get; set; }
}
public class Author
{
    public string FirstName { get; set; }
}
public class Page
{
    public string Heading { get; set; }
}

public class Program2
{
    static void Main()
    {
        Page page = new Page();
        page.Heading = "Heading";
        Books bok = new Books();
        bok.Title = "Title";
        bok.Author = new Author() { FirstName = "FirstName" };
        bok.Page.Add(page);
        List<Books> testList = new List<Books>();
        testList.Add(bok);

        IQueryable<Books> queryableTestData = testList.AsQueryable<Books>();
        ParameterExpression pe11 = Expression.Parameter(typeof(Books), "p");

        Expression left11 = Expression.Property(pe11, "Title");
        Expression right11 = Expression.Constant("Title");
        Expression e11 = Expression.Equal(left11, right11);

        var author = Expression.Property(pe11, "Author");
        left11 = Expression.Property(author, "FirstName");
        right11 = Expression.Constant("FirstName");
        Expression e21 = Expression.Equal(left11, right11);

        Expression predicateBody11 = Expression.And(e11, e21);
        Expression<Func<Books, bool>> condition = Expression.Lambda
                  <Func<Books, bool>>(predicateBody11, new ParameterExpression[] { pe11 });
        var q = queryableTestData.Where(condition);


        var page1 = Expression.Property(pe11, "Page");
        left11 = Expression.Property(page1, "Heading");
        right11 = Expression.Constant("Heading");
        Expression e22 = Expression.Equal(left11, right11);

        Expression predicateBody12 = Expression.And(e11, e22);

        Expression<Func<Books, bool>> condition2 = Expression.Lambda
                    <Func<Books, bool>>(predicateBody12, new ParameterExpression[] { pe11 });

        var qq1 = queryableTestData.Where(condition2);
    }
}
}

Mensagem de exceção: - {"A propriedade da instância 'Heading' não está definida para o tipo> 'System.Collections.Generic.List`1 [XMLStorageAndFilter.Page]'"}

StackTrace: -
em System.Linq.Expressions.Expression.Property (Expressão da expressão, String propertyName)
em XMLStorageAndFilter.Program2.Main () em c: \ Usuários \ Administrador \ Documentos \ Visual Studio 2013 \ Projetos \ XMLStorageAndFilter \ NavProperty.cs: linha 61
em System.AppDomain._nExecuteAssembly (assembly RuntimeAssembly, String [] args)
em System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args)
em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
em System.Threading.ThreadHelper.ThreadStart_Context (estado do objeto)
em System.Threading.ExecutionContext.RunInternal (ExecutionContext ExecutionContext, retorno de chamada ContextCallback, Estado do objeto, Boolean preserveSyncCtx)
em System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, retorno de chamada ContextCallback, Estado do objeto, Boolean preserveSyncCtx)
em System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, retorno de chamada ContextCallback, estado do objeto)
em System.Threading.ThreadHelper.ThreadStart ()

questionAnswers(5)

yourAnswerToTheQuestion