Bununla iki yoldan gidebilirsin. Kullanılması LINQPad ve bir kukla veritabanı, aşağıdaki sorguları inşa (Sen LINQ yeni eğer çok değerli):
Posts.Join(
Post_metas,
post => post.Post_id,
meta => meta.Post_id,
(post, meta) => new { Post = post, Meta = meta }
)
veya
from p in Posts
join pm in Post_metas on p.Post_id equals pm.Post_id
select new { Post = p, Meta = pm }
Bu özel durumda, ben LINQ sözdizimi daha temiz olduğunu düşünüyorum (Ben okumak için en kolay bağlı olarak ikisi arasında geçiş).
Ama işaret etmek istediğim, eğer veritabanınızda uygun yabancı anahtarlar varsa, (post ve post_meta arasında), çok sayıda kayıt yüklemeye çalışmadığınız sürece muhtemelen açık bir birleştirmeye ihtiyacınız yoktur. . Örneğin, tek bir gönderi ve meta verileri yüklemeye çalıştığınızı gösteriyor gibi görünüyor. Her bir gönderi için birçok post_meta kaydı olduğunu varsayarsak, aşağıdakileri yapabilirsiniz:
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
N + 1 probleminden kaçınmak istiyorsanız, açıkça LINQ'dan SQL'e ilgili öğelerin tümünü bir seferde yüklemesini söyleyebilirsiniz (bu, L2S'ye daha aşina olduğunuzda gelişmiş bir konu olabilir). Aşağıdaki örnekte "bir Yazı yüklediğinizde, onunla ilişkili tüm kayıtları 'Post_metas' özelliği tarafından temsil edilen yabancı anahtar aracılığıyla da yüklenir" yazıyor:
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
Aynı türden veya birçok farklı türden LoadWith
oluşan tek bir kümede birçok çağrı yapmak mümkündür DataLoadOptions
. Bu lotları yine de yaparsanız, sadece önbelleğe almayı düşünebilirsiniz.