Anda bisa menggunakan dua cara dengan ini. Menggunakan LINQPad (tidak ternilai jika Anda baru mengenal LINQ) dan database dummy, saya membuat pertanyaan berikut:
Posts.Join(
Post_metas,
post => post.Post_id,
meta => meta.Post_id,
(post, meta) => new { Post = post, Meta = meta }
)
atau
from p in Posts
join pm in Post_metas on p.Post_id equals pm.Post_id
select new { Post = p, Meta = pm }
Dalam kasus khusus ini, saya pikir sintaks LINQ lebih bersih (saya mengubah keduanya tergantung yang paling mudah dibaca).
Hal yang ingin saya tunjukkan adalah bahwa jika Anda memiliki kunci asing yang sesuai dalam database Anda, (antara post dan post_meta) maka Anda mungkin tidak perlu bergabung secara eksplisit kecuali Anda mencoba memuat sejumlah besar catatan . Contoh Anda tampaknya menunjukkan bahwa Anda mencoba memuat satu posting dan itu adalah data meta. Dengan asumsi bahwa ada banyak catatan post_meta untuk setiap posting, maka Anda dapat melakukan hal berikut:
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
Jika Anda ingin menghindari masalah n +1, maka Anda dapat secara eksplisit memberi tahu LINQ ke SQL untuk memuat semua item terkait dalam sekali jalan (meskipun ini mungkin merupakan topik lanjutan saat Anda lebih terbiasa dengan L2S). Contoh di bawah ini mengatakan "ketika Anda memuat Posting, juga memuat semua catatan yang terkait dengannya melalui kunci asing yang diwakili oleh properti '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
Dimungkinkan untuk melakukan banyak LoadWith
panggilan pada satu set DataLoadOptions
untuk tipe yang sama, atau banyak tipe berbeda. Jika Anda melakukan ini banyak, Anda mungkin hanya ingin mempertimbangkan caching.