代码之家  ›  专栏  ›  技术社区  ›  Charlino

急切加载/预取多对多而无加载选项-Linq到Sql

  •  1
  • Charlino  · 技术社区  · 16 年前

    BlogPost <- BlogPostTag -> Tag 情况。

    似乎你也不能用投影来预取多对多的关系。对不

    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;
    }
    

    我能把它压平吗?我错过了什么明显的东西吗?我还有别的办法吗?

    不,我不能改变;-)

    1 回复  |  直到 14 年前
        1
  •  2
  •   Sander Rijken    16 年前

    这将起作用,您可以在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()