1

我有一种情况,我需要通过多对多关系预取一些实体。所以这就像经典的BlogPost <- BlogPostTag -> Tag情况。

是的,我知道 LoadOptions 但我不能使用它,因为它是一个 Web 应用程序,并且我使用每个请求模式的一个数据上下文。

似乎您也不能使用投影来预取多对多关系。是的?不?

我想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 ;-)

4

1 回答 1

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()
于 2009-12-17T23:07:41.850 回答