EntityFrameworkを使用してデータを取得するASP.NETMVCアプリケーションがあります。
ビューに渡す前に、エンティティをモデルに変換する必要があります。投影は非常に複雑になる可能性がありますが、単純に保つために:
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であると仮定します)。
どういうわけか、投影を分離して別の投影内で再利用できますか?