How to reuse projections in Entity Framework?

Viewed 2185

I have an ASP.NET MVC application which uses Entity Framework to get data.

I need to transform Entites to Models before passing them to View. Projections can be very complex, but to keep it simple:

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

This can be used in a controller like this:

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

Very good. But what if I want to use this projection inside another one? Example:

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().
           };
}

(let's suppose blog can have more then one author and it is of type User).

Can I somehow separate the projections and reuse them inside another ones?

1 Answers
Related