2009-09-24 13 views
5

अक्सर मुझे एकाधिक तालिकाओं से डेटा गठबंधन करने और परिणाम को ग्रिड व्यू नियंत्रण में प्रदर्शित करने की आवश्यकता होती है।लिंक से SQL डिजाइन प्रश्न

मैं पेज_लोड ईवेंट में एक लिंक क्वेरी इनलाइन लिख सकता हूं, एक अनाम प्रकार लौटाता हूं जो मुझे आवश्यक सभी फ़ील्ड को जोड़ता है, और परिणाम को ग्रिड व्यू नियंत्रण में डेटाबेस करता है।

  • समस्या: मैं Scott Guthrie on his blog द्वारा वर्णित 'सहायक विधियों' का उपयोग करता हूं। ऐसी सहायक विधि एक अनाम प्रकार वापस नहीं कर सकती है। इस दृष्टिकोण के लिए पूछताछ इनलाइन होना चाहिए।

मैं एक डेटाबेस दृश्य लिख सकता हूं जो मुझे आवश्यक डेटा देता है, और इस (नए और ज्ञात) प्रकार के विरुद्ध एक क्वेरी के साथ एक सहायक विधि लिखता है जो यह लौटाता है।

  • समस्या: मुझे अपने डेटाबेस स्कीमा में बहुत सारे विचारों की आवश्यकता होगी, और मैं अपने डेटा के बहुत से अनावश्यक पहलुओं को पेश करूंगा। मैं लिंक का उपयोग करने का कुछ लाभ भी खो देता हूं - डेटाबेस से सभी व्यावसायिक तर्क को हटा रहा हूं।

मैं एक दृष्टिकोण मुझे सहायक तरीकों में LINQ क्वेरी रखने की सुविधा देता है, फिर भी मुझे सभी विशेषताओं है कि मैं उनके संबंधित डेटा बाइंडिंग भाव में ग्रिड पर की जरूरत का उपयोग करने की अनुमति देता है कि लेना चाहते हैं। क्या यह किया जा सकता है?

+0

क्या यह सी # है? यदि ऐसा है, तो आप एक सी # टैग जोड़कर और अधिक विचार प्राप्त करेंगे। यदि आप ग्रिड व्यू नियंत्रण का उपयोग कर रहे हैं, तो मैं एएसपी.नेट मानता हूं। –

+0

मुझे नहीं लगता कि भाषा महत्वपूर्ण है। – cdonner

उत्तर

1

मैंने गलत सवाल पूछा, जैसा कि मैं अक्सर करता हूं। मुझे अज्ञात प्रकारों को देखने के लिए प्रेरित किया गया था ग्रिड व्यू की एक स्पष्ट सीमा थी - <asp:BoundField> में डाटाबेसिंग अभिव्यक्ति का उपयोग करने में मेरी असमर्थता (डेटाफ़िल्ल्ड पैरामीटर केवल उस तालिका के कॉलम नाम स्वीकार करता है जो लिंक क्वेरी क्वेरी करता है)।

यह बताता है कि टेम्पलेट फ़ील्ड में संभव है कि लिंक डेटा डेटा के इवल और एक्सेस सदस्यों का उपयोग करने के लिए संभव है, और लिंक मेरे लिए क्वेरी का ख्याल रखता है। दूसरे शब्दों में, मैं क्वेरी को अपने सहायक विधि में रख सकता हूं, क्या यह एक प्राथमिक डेटाबेस तालिका प्रकार (उदा। खाता) वापस कर सकता है, और मैं खातों को ग्रिड व्यू में जोड़ता हूं। डाटाबेसिंग एक्सप्रेशन में मैं खाता ऑब्जेक्ट्स के डेटा सदस्यों तक पहुंच सकता हूं जो अन्य तालिकाओं में रहते हैं, बिना उन्हें क्वेरी में स्पष्ट रूप से खींचने के। उत्तम।

0

मुझे नहीं पता कि अज्ञात प्रकारों का उपयोग करके इसे प्राप्त करने का एक व्यवहार्य तरीका है या नहीं। लेकिन मेरे पास एक सुझाव है जो WinForms में काम करेगा, लेकिन मुझे एएसपी.NET के बारे में निश्चित नहीं है।

आपको जो चाहिए वह गुणों के साथ एक प्रकार है जहां न तो संपत्तियों की संख्या, न ही गुणों के प्रकार और नाम संकलित समय पर ज्ञात हैं। ऐसी चीज बनाने का एक तरीका ICustomTypeDescriptor है।

आपको इस इंटरफ़ेस को क्वेरी से एक पंक्ति के लिए क्वेरी द्वारा लौटाई गई गुणों का समर्थन करने वाले ऑब्जेक्ट्स की एक निजी बैकिंग स्टोर के साथ कार्यान्वित करने का एक प्रकार बनाना है। फिर आप GetProperties() को बैकिंग सरणी तक पहुंचने के लिए PropertyDescriptor प्रति कॉलम और PropertyDescriptor.GetValue() और PropertyDescriptor.SetValue() वापस करने के लिए लागू करते हैं।

PropertyDescriptor.Name को लागू करके आपको सही कॉलम नाम मिलेगा; इसके लिए संपत्ति नामों को संग्रहीत करने के लिए शायद एक और बैकिंग स्टोर की आवश्यकता होगी। और कार्यान्वित करने के लिए बहुत कुछ है, लेकिन अंत में आपका नया प्रकार लगभग सामान्य प्रकार की तरह व्यवहार करेगा - और अब यदि - यदि नियंत्रण आप ICustomTypeDescriptor के बारे में जानने और उपयोग करने के लिए बाध्यकारी हैं।

अद्यतन

मैं सिर्फ यह बताते हुए कि ASP.NET डेटा बाइंडिंग जानता है और ICustomTypeDescriptor का उपयोग करता है पाठ की एक बिट मिल गया।

+0

@ डैनियल दिलचस्प सुझाव - यह पता चला है कि समाधान बहुत आसान है, मेरा अपना जवाब देखें। – cdonner

0

स्कॉट परिणाम एक ग्रिड में डालने से पहले सेट को आकार देने के बारे में श्रृंखला वार्ता में पहले पोस्ट:

Part 3 - Querying our Database

"हमारे क्वेरी परिणामों को आकार" के लिए नीचे स्क्रॉल।

+0

मैंने इस भाग को भी पढ़ा, और यह वही है जहां मेरा भ्रम आया - इस भाग में वह गुमनाम में गुमनाम प्रकारों को बांधने के लिए इनलाइन प्रश्नों का उपयोग करता है, जो इनलाइन प्रश्नों के लिए बहुत अच्छी तरह से काम करता है, लेकिन जब आप उसकी सलाह का पालन करते हैं तो दृष्टिकोण टूट जाता है भाग 9 से डेटाकॉन्टेक्स्ट का विस्तार करने के लिए। – cdonner

संबंधित मुद्दे