我遇到过需要通过多对多关系预取某些实体的情况。所以它就像经典的BlogPost <- BlogPostTag -> Tag
情况。
是的,我知道LoadOptions但是我不能使用它,因为它是一个Web应用程序,我在每个请求模式下使用一个datacontext。
您似乎也无法使用投影来预取多对多关系。是?否?
我想根据一组博客返回IQueryable<Tag>
。我能做的最好的事情是通过执行以下操作让它返回IQueryable<IEnumerable<Tag>>
:
public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts)
{
var jobCats = from bp in blogPosts
select bp.BlogPostTags.Select(x => x.Tag);
return jobCats;
}
我可以压扁吗?我错过了一些明显的东西吗我可以采取另一种方法吗?
不,我不能改变ORM; - )
答案 0 :(得分:2)
这将有效,你可以深入查看linq查询
public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts)
{
return from bp in blogPosts
from tag in bp.BlogPostTags
select tag;
}
如果您声明方法:
public static IQueryable<Tag> GetJobsCategories(this IQueryable<BlogPost> blogPosts)
您可以将它用作可查询的扩展方法。例如
myContext.BlogPosts.GetJobsCategories()