आवश्यकतानुसार "विशिष्ट प्रश्न" पर जाएं। कुछ पृष्ठभूमि:इस लिंक SQL को डायनामिक क्वेरी (स्ट्रिंग का उपयोग करके) के रूप में कैसे लिखें?
परिदृश्य: मेरे पास डीडीएल के साथ आबादी वाले "ड्रिल डाउन" फ़िल्टर (क्वेरी ऑब्जेक्ट) वाले उत्पादों का एक सेट है। प्रत्येक प्रगतिशील डीडीएल चयन से उत्पाद सूची को और साथ ही साथ डीडीएल के लिए कौन से विकल्प छोड़े जाएंगे। उदाहरण के लिए, उपकरण से हथौड़ा चुनने से उत्पाद आकार केवल हथौड़ा आकार दिखाने के लिए सीमित होता है।
वर्तमान सेटअप: मैंने एक क्वेरी ऑब्जेक्ट बनाया है, इसे एक भंडार में भेजा है, और प्रत्येक विकल्प को एक SQL "टेबल मूल्यवान फ़ंक्शन" में खिलाया है जहां शून्य मान "सभी उत्पाद प्राप्त करें" का प्रतिनिधित्व करते हैं।
मैं इसे एक अच्छा प्रयास मानता हूं, लेकिन डीडीडी से स्वीकार्य है। मैं एसक्यूएल में किसी भी "प्रोग्रामिंग" से बचना चाहता हूं, उम्मीद है कि सब कुछ एक भंडार के साथ कर रहा है। इस विषय पर टिप्पणियों की सराहना की जाएगी।
विशिष्ट प्रश्न:
मैं एक Dynamic Query के रूप में इस क्वेरी कैसे पुनर्लेखन हैं? 101 Linq Examples जैसे कुछ के लिए एक लिंक शानदार होगा, लेकिन एक गतिशील क्वेरी स्कोप के साथ। मैं वास्तव में इस विधि को उद्धरण में फ़ील्ड पास करना चाहता हूं जिसके लिए मैं विकल्पों की एक सूची चाहता हूं और कितने उत्पादों में यह विकल्प है।
from p in db.Products
group p by p.ProductSize into g
select new Category {
PropertyType = g.Key,
Count = g.Count() }
प्रत्येक DDL विकल्प होगा "चयन (21)" जहां (21) उत्पाद है कि उस विशेषता की मात्रा है। एक विकल्प चुनने पर, शेष सभी शेष डीडीएल शेष विकल्पों और गणनाओं के साथ अपडेट होंगे।
संपादित करें: अतिरिक्त नोट्स:
.OrderBy("it.City") // "it" refers to the entire record
.GroupBy("City", "new(City)") // This produces a unique list of City
.Select("it.Count()") //This gives a list of counts... getting closer
.Select("key") // Selects a list of unique City
.Select("new (key, count() as string)") // +1 to me LOL. key is a row of group
.GroupBy("new (City, Manufacturer)", "City") // New = list of fields to group by
.GroupBy("City", "new (Manufacturer, Size)") // Second parameter is a projection
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new (null as string)")// Projection not available later?
.Select("new (key.City, it.count() as string)")// GroupBy new makes key an object
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new (null as string)")// Projection not available later?
.Select("new (key.City, it as object)")// the it object is the result of GroupBy
var a = Product
.Where("ProductType == @0", "Maps")
.GroupBy("@0", "it", "City") // This fails to group Product at all
.Select("new (Key, it as Product)"); // "it" is property cast though
मैं अब तक क्या सीखा है LinqPad है शानदार है, लेकिन अभी भी एक जवाब की तलाश में। आखिरकार, इस तरह से पूरी तरह से यादृच्छिक शोध मुझे लगता है कि प्रबल होगा। जबरदस्त हंसी।
संपादित करें:
जॉन स्कीट एक शानदार विचार था: डाली कि मैं क्या IGrouping<string, Product>
के रूप में की जरूरत है। जॉन स्कीट के लिए धन्यवाद! एक बार ऑब्जेक्ट डालने के बाद, आप सेट पर गणना कर सकते हैं और परिणामों को एक अलग सूची में फ़ीड कर सकते हैं।
आप एक पूरे गतिशील क्वेरी की ज़रूरत है? क्या आपका फ़िल्टरिंग मानदंड नहीं है (जहां खंड) केवल गतिशील पहलू है? – Gabe
मुझे विश्वास है कि मुझे एक पूर्ण डीक्यू चाहिए। प्रत्येक फ़ील्ड के लिए इस कोड को डुप्लिकेट किए बिना वे फ़िल्टर करना चाहते हैं, मुझे ग्रुपबी फ़ील्ड को एक स्ट्रिंग के रूप में निर्दिष्ट करने की आवश्यकता होगी। –
IGrouping पर कास्ट करें <स्ट्रिंग, उत्पाद> केवल तभी संभव है जब आप 'इसे' वापस कर दें। जब आप उपयोग करते हैं। चयन करें ("नया (कुंजी, यह उत्पाद के रूप में, गिनती() गिनती के रूप में)") इसे कैसे डालना ???? –