आप इसके साथ दो तरीके से जा सकते हैं। का उपयोग करते हुए 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 सिंटैक्स क्लीनर है (मैं दोनों के बीच परिवर्तन करता हूं, जिसके आधार पर पढ़ना सबसे आसान है)।
हालाँकि जो बात मैं बताना चाहता हूँ वह यह है कि यदि आपके डेटाबेस में उपयुक्त विदेशी कुंजियाँ हैं, (पोस्ट और पोस्ट_मेटा के बीच) तो आपको शायद तब तक एक स्पष्ट ज्वाइन की आवश्यकता नहीं है जब तक आप बड़ी संख्या में रिकॉर्ड लोड करने की कोशिश नहीं कर रहे हैं। । आपका उदाहरण इंगित करता है कि आप एक पोस्ट लोड करने की कोशिश कर रहे हैं और यह मेटा डेटा है। यह मानते हुए कि प्रत्येक पोस्ट के लिए कई पोस्ट_मेटा रिकॉर्ड हैं, तो आप निम्न कार्य कर सकते हैं:
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
यदि आप n + 1 समस्या से बचना चाहते हैं, तो आप सभी संबंधित वस्तुओं को एक बार में लोड करने के लिए LINQ से 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
ही प्रकार, या कई अलग-अलग प्रकारों के लिए एक ही सेट पर कई कॉल करना संभव है । यदि आप यह बहुत करते हैं, तो आप बस कैशिंग पर विचार करना चाहते हैं।