이 두 가지 방법으로 갈 수 있습니다. 사용 LINQPad 와 더미 데이터베이스, 나는 다음과 같은 쿼리를 내장 (당신이있는 거 LINQ에 새로운 경우 귀중한를)
Posts.Join(
Post_metas,
post => post.Post_id,
meta => meta.Post_id,
(post, meta) => new { Post = post, Meta = meta }
)
또는
from p in Posts
join pm in Post_metas on p.Post_id equals pm.Post_id
select new { Post = p, Meta = pm }
이 특별한 경우에는 LINQ 구문이 더 깨끗하다고 생각합니다 (읽기 가장 쉬운 것에 따라 둘 사이에서 변경됩니다).
내가 지적하고 싶은 것은 데이터베이스에 적절한 외래 키 (post와 post_meta 사이)가 있다면 많은 수의 레코드를로드하려고하지 않으면 명시 적 조인이 필요하지 않을 것입니다 . 귀하의 예는 단일 게시물을로드하려고하고 메타 데이터임을 나타냅니다. 각 게시물에 대해 많은 post_meta 레코드가 있다고 가정하면 다음을 수행 할 수 있습니다.
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
n + 1 문제를 피하려면 LINQ to SQL에 모든 관련 항목을 한 번에로드하도록 명시 적으로 지시 할 수 있습니다 (L2S에 더 익숙한 경우 고급 주제 일 수 있음). 아래 예는 "포스트를로드 할 때 'Post_metas'속성으로 표시되는 외래 키를 통해 이와 관련된 모든 레코드도로드합니다"라고 말합니다.
var dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Post>(p => p.Post_metas);
var dataContext = new MyDataContext();
dataContext.LoadOptions = dataLoadOptions;
var post = Posts.Single(p => p.ID == 1); // Post_metas loaded automagically
동일한 유형 또는 여러 유형 LoadWith
에 대해 단일 세트에서 많은 호출을 수행 할 수 DataLoadOptions
있습니다. 이 작업을 많이 수행하면 캐싱을 고려할 수 있습니다.