IQueryable Синтаксис лямбда-проекции

У меня есть IQueryable, чьи объекты Entity Framework 4 я бы хотел проецировать на их эквиваленты DTO. Одним из таких объектов «Person» является класс EF4, а соответствующий POCO PersonP является классом, который я определил. Я использую Automapper для сопоставления между ними. Тем не менее, когда я пытаюсь следующий код:

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

Проекция генерирует эту ошибку во время выполнения:

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.

Каков соответствующий синтаксис для созданияIQueryable<PersonP> проекция с использованием Automapper? Спасибо.

Постскриптум Automapper настроен правильно - я использую его в других местах для преобразования туда и обратно между Person и PersonP, т.е.Mapper.Map<Person, PersonP>(myPersonObject) правильно возвращаетPersonP объект.

РЕДАКТИРОВАТЬ (больше кода):

Я использую это для вспомогательной функции для привязки POCO сущностей EF4 (PersonP) к Telerik Grid, которая не будет сериализовать сами сущности должным образом, так как они содержат циклические ссылки (то есть свойства навигации). Мой код выглядит так:

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...
}

.ToGridModel Метод является методом расширения наIQueryable и он возвращает сложный объект, который я не могу надежно проанализировать - так что это заставляет меня поверить, что я должен выполнить фильтрацию после того, как я выполнил проекцию на POCO.

ОБНОВЛЕНИЕ 2:

Пытаясь упростить вещи, я создал неуниверсальный метод, подобный этому:

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 };
}

Этот код также не работает при создании проекции. Я заметил, что IQueryable.Select () имеет несколько перегрузок: выражение> является одним из них. Могу ли я представить этот вызов функции / делегата, используя одну из этих перегрузок?

Ответы на вопрос(3)

Ваш ответ на вопрос