2010-03-29 10 views
5

आम तौर पर, मैं यह कर:कस्टम श्रेणी के रूप में एक लिंक गतिशील क्वेरी परिणाम कैसे डाला जाए?

var a = from p in db.Products 
     where p.ProductType == "Tee Shirt" 
     group p by p.ProductColor into g 
     select new Category { 
       PropertyType = g.Key, 
       Count = g.Count() } 

लेकिन मैं इस तरह कोड है:

var a = Products 
     .Where("ProductType == @0", "Tee Shirt") 
     .GroupBy("ProductColor", "it") 
     .Select("new (Key, it.Count() as int)"); 

क्या वाक्य रचना मैं समान परिणाम, यानी उत्पादन करने के लिए बदल सकता है, मैं कैसे श्रेणी के एक प्रक्षेपण करते हो दूसरे लिंक कथन से?

मैं जानता हूँ कि में जी और यह ही कर रहे हैं और पूरे तालिका रिकॉर्ड का प्रतिनिधित्व दोनों कि, और कहा कि मैं सिर्फ एक गिनती करने के लिए पूरे रिकॉर्ड खींच रहा हूँ। मुझे भी इसे ठीक करने की ज़रूरत है। संपादित करें: मार्सेलो कैंटोस ने बताया कि लिंकक अनावश्यक डेटा खींचने के लिए पर्याप्त स्मार्ट नहीं है। धन्यवाद!

+1

क्या आपने सत्यापित किया है कि आप वास्तव में पूरे रिकॉर्ड को खींच रहे हैं? मैं गतिशील LINQ बिल्कुल नहीं जानता, लेकिन मुझे नहीं लगता कि यह स्थिर LINQ-to-SQL के रूप में इसके बारे में उतना ही स्मार्ट क्यों नहीं हो सकता है। –

+0

मुझे लगता है कि कैंटोस यह कितना खींचता है इसके बारे में सही है। –

उत्तर

1

आपको इसे बिल्कुल क्यों करना होगा? आप अभी भी GroupBy कॉल के बाद जानकारी के सभी है के बाद से, आप आसानी से यह कर सकते हैं:

var a = Products 
     .Where("ProductType == @0", "Tee Shirt") 
     .GroupBy("ProductColor", "it") 
     .Select(c => new Category { 
      PropertyType = g.Key, Count = g.Count() 
     }); 

उत्पाद के प्रकार अभी भी के माध्यम से प्रवाह और सुलभ हो सकता है और नियमित रूप से समूहों/छानने प्रकार उत्परिवर्तित नहीं करना चाहिए चाहिए कि विस्तार विधियों के माध्यम से बह रहा है।

+1

मुझे आश्चर्य होगा अगर डायनामिक क्वेरी के परिणाम में एक डायनामिक क्वेरी चयन विधि उपलब्ध होगी, केवल एक स्ट्रिंग पैरामीटर लेना, लैम्ब्डा नहीं। यह निश्चित रूप से तब तक है जब तक मुझे कुछ स्पष्ट याद आ रही है। –

+0

दूसरे शब्दों में, .GroupBy() के बाद केवल एक ही चयन उपलब्ध है। चुनें कि डायनेमिक क्वेरी संस्करण (लम्बाडा से कम) कौन सा है। –

+1

मुझे यह करने में विशिष्ट त्रुटि है "लैम्बडा अभिव्यक्ति को 'स्ट्रिंग' टाइप करने के लिए परिवर्तित नहीं किया जा सकता है क्योंकि यह एक प्रतिनिधि प्रकार नहीं है। मेरा कोड var = product.GroupBy (" ProductColor "," it ") था। => नया {नाम = ((उत्पाद) सी) .ProductName}); हालांकि, अगर मैं नेस्टेड फ़ोरैच (IGrouping b में ए) का उपयोग करता हूं {foreach (बी में उत्पाद सी) {// create एक सूची मैन्युअल रूप से}}, तो यह बहुत अच्छी तरह से काम करता है। यह मानों को निकालता है और उन्हें एक अलग मेमोरी चर में सेट करता है, लेकिन कम से कम यह एक तरीका है। –