これで2つの方法が考えられます。使用する 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構文はよりクリーンだと思います(どちらが最も読みやすいかに応じて、2つを切り替えます)。
ただし、データベースに適切な外部キーがある場合(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をロードするときに、「Post_metas」プロパティで表される外部キーを介して、Postに関連付けられているすべてのレコードもロードします」と述べています。
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
ます。ただし、これをたくさん行う場合は、キャッシュを検討することをお勧めします。