2009-12-17 1 views
1

다 대 다 관계를 통해 일부 엔티티를 프리 페치해야하는 상황이있다. 그래서 그것은 전형적인 BlogPost <- BlogPostTag -> Tag 상황과 같습니다.LoadOptions없이 다차원로드/프리 페칭을 열망한다. Linq to Sql

예, 저는 LoadOptions를 알고 있지만 웹 응용 프로그램이고 요청 패턴 당 하나의 datacontext를 사용하기 때문에 사용할 수 없습니다.

또한 다 대다 관계를 미리 가져 오기 위해 프로젝션을 사용할 수없는 것으로 보입니다. 예? 아니?

블로그 집합을 기준으로 IQueryable<Tag>을 반환하고 싶습니다.

public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts) 
{ 
    var jobCats = from bp in blogPosts 
        select bp.BlogPostTags.Select(x => x.Tag); 

    return jobCats; 
} 

는 그 평평 수 : 내가 할 수있는 최선은 다음을 수행하여 IQueryable<IEnumerable<Tag>>를 반환 할 수있다? 나는 명백한 것을 놓치고 있는가? 내가 취할 수있는 또 다른 접근법이 있습니까?

그리고 아니, 내가 변경할 수 없습니다으로 ORMs ;-)

답변

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() 
+0

간단합니다. 나는 명백한 것이 빠졌음을 알았다! 감사. – Charlino