में दोहराया प्रक्षेपण कोड से बचना मैं एक समस्या यहाँइकाई की रूपरेखा
Initializing strongly typed objects in LINQ to Entities
केवल पूरी तरह से विपरीत दिशा से वर्णित एक के समान हल करने के लिए कोशिश कर रहा हूँ। मेरे पास मेरे भंडार में कई कार्य हैं, जिनमें से सभी समान आकार के डेटा लौटते हैं। पल यह भंडार में प्रत्येक प्रश्न के लिए मौजूद है पर
select new pocoClass
{
// complex projection that is several pages long includes grabbing a graph of data
}
: मुद्दा मेरी प्रक्षेपण कोड है। मैं इसे ऑब्जेक्ट स्टार्टिज़र में ले जाने की कोशिश करता था, लेकिन इससे मुझे डरावना "केवल पैरामीटर रहित कन्स्ट्रक्टर और प्रारंभकर्ताओं को LINQ से इकाइयों में समर्थित किया जाता है।" मुद्दा।
मैं दो प्रश्नों
var candidates = (from thing in _entities.whatever
where (complex.stuff==true)
select thing);
var final = (from thing in candidates.AsEnumerable()
let x = thing.ITEMS.Where(blah=>blah.blah==param)
let y = x.OTHERITEMS.FirstOrDefault()
select new pocoClass(thing,x,y);
लेकिन यहां फाइनल में बंटवारे की कोशिश हमेशा रिक्त है और नए pocoClass में कोड कभी नहीं कहा जाता है किया है। मैंने उपरोक्त में चलो x & वाई शामिल किया है क्योंकि ये हमेशा प्रक्षेपण के प्रत्येक उपयोग के बीच भिन्न होते हैं।
तो, क्या मुझे अपने प्रक्षेपण की कई प्रतियों पर वापस जाना है या क्या इससे कोई दूसरा तरीका है?
लगभग - अपने व्यापार तर्क मुद्दा - मेरी उदाहरण में लेट बयान जो प्रत्येक ग्राहक प्रक्षेपण से पहले के लिए मूल्यांकन किया जाता है। – Andiih
असल में मुझे समाधान देने के लिए पर्याप्त है। मैंने एक नया सरलीकृत डीटीओ इंटरमीडिएट क्लास बनाया है जिसे मैं केवल आधा दर्जन मानों की प्रतिलिपि बनाकर प्रोजेक्ट कर सकता हूं: प्रत्येक एक पूर्ण ईएफ इकाई है। फिर मैं उन इकाइयों से अंतिम प्रक्षेपण करने के लिए आपके समाधान का उपयोग करता हूं। यकीन नहीं है कि यह कैसे करेगा, लेकिन यह निश्चित रूप से neater! – Andiih
@Andiih: पृष्ठभूमि में कितने प्रश्न निष्पादित किए गए हैं, यह देखने के लिए आपको SQL प्रोफाइलर का उपयोग करना होगा। एक अच्छा बदलाव है कि ईएफ कवर के पीछे कई प्रश्न निष्पादित करेगा। प्रौद्योगिकी-पाठ्यक्रम- इसकी सीमाएं हैं। यदि आप प्रदर्शन से खुश नहीं हैं और इस बारे में कोई जानकारी नहीं है कि इसे एक ही प्रश्न में कैसे प्राप्त किया जाए, तो शायद मैं इसके साथ आपकी सहायता कर सकता हूं। उस स्थिति में, SO पर एक नया प्रश्न यहां शुरू करें और यहां एक लिंक छोड़ दें।चियर्स – Steven