2009-12-17 24 views
1

我有一种情况,我需要通过多对多的关系来预取一些实体。所以这就像经典的BlogPost <- BlogPostTag -> Tag情况。急于加载/预取多对多没有LoadOptions - Linq的SQL

是的,我知道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; 
} 

我可以拼合吗?我错过了明显的东西吗?我可以采取另一种方法吗?

不,我不能改变奥姆斯;-)

回答

2

这将工作,你可以向下钻取在LINQ查询

public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts) 
{ 
    return from bp in blogPosts 
      from tag in bp.BlogPostTags 
      select tag; 
} 

如果你声明的方法,例如:

​​

您可以将它用作可查询的扩展方法。例如

myContext.BlogPosts.GetJobsCategories() 
+0

是的,很简单。我知道我错过了明显的!谢谢。 – Charlino 2009-12-18 00:58:12