渴望在没有LoadOptions的情况下加载/预取多对多 - Linq到Sql

时间:2009-12-17 22:53:48

标签: linq linq-to-sql eager-loading prefetch

我遇到过需要通过多对多关系预取某些实体的情况。所以它就像经典的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; - )

1 个答案:

答案 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()