Sintaxe de projeção IQueryable Lambda

Eu tenho um IQueryable cujos objetos do Entity Framework 4 eu gostaria de projetar para seus equivalentes de DTO. Um desses objetos 'Person' é uma classe EF4 e o POCO PersonP correspondente é uma classe que eu defini. Estou usando o Automapper para mapear entre eles. No entanto, quando tento o seguinte código:

IQueryable<Person> originalModel = _repo.QueryAll();
IQueryable<PersonP> projection = originalModel.Select(e => Mapper.Map<Person, PersonP>(e));

A projeção gera este erro no tempo de execução:

LINQ to Entities does not recognize the method 'TestSite.Models.PersonP Map[Person,PersonP](TestSite.DataLayer.Model.Person)' method, and this method cannot be translated into a store expression.

Qual é a sintaxe apropriada para criar umIQueryable<PersonP> projeção usando o Automapper? Obrigado.

P.S. O Automapper está configurado corretamente - eu o uso em outros lugares para converter entre Person e PersonP, ou seja,Mapper.Map<Person, PersonP>(myPersonObject) retorna corretamente umPersonP objeto.

EDIT (mais código):

Estou usando isso para uma função auxiliar para vincular EFOC Entity POCOs (PersonP) a uma Telerik Grid - que não serializará as próprias entidades adequadamente, pois elas contêm referências circulares (ou seja, propriedades de navegação). Meu código fica assim:

public static GridModel GetGridModel<TEntity, TPoco>(IRepository<TEntity> repo, GridState gridState) where TEntity : EntityObject
{
 var originalModel = repo.QueryAll().ToGridModel(gridState);
 var projection = originalModel.Select(e => Mapper.Map<TEntity, TPoco>(e));


 return projection.ToGridModel(gridState); // applies filters, sorts, pages, etc...
}

a.ToGridModel método é um método de extensão emIQueryable e ele retorna um objeto complexo que não posso analisar com segurança - e isso me leva a acreditar que preciso executar a filtragem depois de fazer a projeção para os POCOs.

ATUALIZAÇÃO 2:

Tentando simplificar as coisas, criei um método não genérico como este:

public static GridModel GetGridModel2(IRepository<Client> repo, GridState gridState)
{
 IQueryable<Client> originalModel = repo.QueryAll();
 IQueryable<ClientP> projection = originalModel.Select(c => ClientToClientP(c));

 return projection.ToGridModel(gridState);
}

private static ClientP ClientToClientP(Client c)
{
 return new ClientP { Id = c.Id, FirstName = c.FirstName };
}

Este código também falha ao criar a projeção. Percebo que IQueryable.Select () tem várias sobrecargas: Expression> sendo uma delas. Eu poderia representar essa função / delegar chamada usando uma dessas sobrecargas?

questionAnswers(3)

yourAnswerToTheQuestion