我有一个 ASP.NET MVC 应用程序,它使用实体框架来获取数据。
我需要将实体转换为模型,然后再将它们传递给视图。预测可能非常复杂,但为了保持简单:
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().
};
}
(假设博客可以有多个作者,并且其类型为“用户”)。
我可以以某种方式分离投影并在另一个投影中重复使用它们吗?