आप इसके साथ दो तरीकों से जा सकते हैं। 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 एसक्यूएल को बता सकते हैं संबंधित के सभी लोड करने के लिए: मान लिया जाये कि प्रत्येक पद के लिए कई post_meta रिकॉर्ड हैं कि, तो आप निम्न कर सकता है एक बार में आइटम (हालांकि यह एक उन्नत विषय हो सकता है जब आप 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
का एकल सेट, या कई अलग-अलग प्रकार। यदि आप हालांकि बहुत कुछ करते हैं, तो आप कैशिंग पर विचार करना चाहेंगे।
स्रोत
2010-05-04 18:27:28
में शामिल होने के लिए आप क्या हासिल करने की कोशिश कर रहे हैं? – GerManson
आप एक वाक्य में क्या करना चाहते हैं? – hunter
आपके मुख्य चयनकर्ता * रास्ता * बहुत जटिल हैं। यदि आप आईडी द्वारा चुनना चाहते हैं, तो बस x => x.ID ठीक है। –