Как повторно использовать проекции в Entity Framework?

У меня есть приложение ASP.NET MVC, которое использует Entity Framework для получения данных.

Мне нужно преобразовать сущности в модели, прежде чем передавать их в представление. Прогнозы могут быть очень сложными, но для простоты:

public static IQueryable<UserModel> ToModel(this IQueryable<User> users)
{
    return from user in users
           select new UserModel
           {
               Name = user.Name,
               Email = user.Email,
           };
}

Это можно использовать в таком контроллере:

return View(Repository.Users.ToModel().ToList());

Очень хороший. Но что, если я хочу использовать эту проекцию внутри другой? Пример:

public static IQueryable<BlogPostModel> ToModel(this IQueryable<BlogPost> blogs)
{
    return from blogs in blogs
           select new BlogPostModel
           {
               Title = blog.Title,
               Authors = blog.Authors.AsQueryable().ToModel(), // (entities are POCOs)
               // This does not work, because EF does not understand method ToModel().
           };
}

(предположим, что у блога может быть более одного автора и он имеет тип User ).

Могу ли я как-то разделить проекции и повторно использовать их внутри других?

5
задан jakubka 15 August 2012 в 22:16
поделиться