【问题标题】:Eager loading / prefetching many-to-many without LoadOptions - Linq to Sql在没有 LoadOptions 的情况下急切加载/预取多对多-Linq to Sql
【发布时间】:2009-12-17 22:53:47
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这行得通,你可以在 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()
    

    【讨论】:

    • 是的,很简单。我知道我错过了明显的!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多