2011-09-11 25 views
8

1)कुछ कीवर्ड में Linq की जांच कीवर्ड

समझने परेशानी हो रही है में शामिल होने के परिणाम, समूह या चयन खंड के भंडारण के लिए अस्थायी पहचानकर्ता पैदा करता है।

मुझे लगता है into कीवर्ड केवल समूह, या चयन खंड में शामिल होने के हिस्से के रूप में इस्तेमाल किया जा सकता है?

2)

क) मुझे लगता है कि जब intoसमूह के एक भाग के रूप में प्रयोग किया जाता है या खंड का चयन पढ़ा है, यह splices दो हिस्सों में और कहा कि सीमा चर की वजह से क्वेरी पहले में घोषित क्वेरी का आधा हिस्सा क्वेरी के दूसरे भाग में गुंजाइश से बाहर जाता है। सही बात?

ख) लेकिन जब into खंड में शामिल होने के हिस्से के रूप में किया जाता है, rangle चर कभी क्वेरी के भीतर क्षेत्र से बाहर जाना (जब तक क्वेरी भी group...into या select...into शामिल हैं)। मुझे लगता है कि यह खंड में शामिल होने पर क्वेरी को दो हिस्सों में विभाजित नहीं कर रहा है?

ग) एक क्वेरी अभिव्यक्ति खंड से एक वैकल्पिक क्वेरी शरीर द्वारा पीछा (जहां, से होते हैं, खंड) हैं और या तो के साथ समाप्त समूह खंड के चयन करना होगा।

घ) यदि into वास्तव में दो हिस्सों में क्वेरी splices, निम्न उदाहरण में समूह खंड शरीर का हिस्सा है:

 var result = from c1 in a1 
        group c1 by c1.name into GroupResult 
        select ... 

आप


उत्तर के लिए धन्यवाद यूफुक:

एक)

प्रकार IEnumerable<IGrouping<Key,Foo>> का एक परिणाम के लौटने के बाद आप से एक समूह का इस तरह IEnumerable>

एक GroupBy ऑपरेटर करता है नहीं एक दृश्य मिलता है और न IEnumerable<Key,IEnumerable<Foo>>

ख) क्या हम तर्क नहीं दे सकते कि group...by...into या join...into क्वेरी को इस अर्थ में विभाजित करते हैं कि पूछताछ के दूसरे भाग से पहले कम से कम अवधारणा को क्वेरी के भाग में भाग लेना चाहिए?Robotsushi को

उत्तर:

अधिक मैं इसके बारे में सोच रहा हूँ, और मैं लग रहा है कि मेरे सवाल का सुंदर व्यर्थ है, क्योंकि यह कोई व्यावहारिक मूल्य क्या इतना कभी नहीं है मिलता है। अभी भी ...

जब आप कहते हैं कि यह विभाजित हो जाता है।

कई मामलों में इस विभाजन के एक तरफ सीमा चर नहीं किया जा सकता: आप चर विभाजित हो जाता है या एसक्यूएल उत्पन्न क्वेरी विभाजित हो जाता है

यहाँ के दायरे मतलब है उद्धरण है दूसरी तरफ रेंज चर के साथ मिश्रित। कीवर्ड में जो इस समूह का हिस्सा है-क्लॉज का उपयोग को इस क्वेरी के दो हिस्सों को जोड़ने या विभाजित करने के लिए किया जाता है। इस प्रकार, यह क्वेरी के के बीच सीमा को चिह्नित करता है जिस पर सीमा चर आमतौर पर चढ़ नहीं सकते हैं। इस क्वेरी के अंतिम भाग में कीवर्ड के ऊपर श्रेणी चर शामिल हैं।

मेरा सवाल यह है कि दोनों हिस्सों को अभी भी एक प्रश्न माना जाता है और इस तरह की पूरी क्वेरी में अभी भी केवल तीन हिस्से होते हैं। यदि ऐसा है, तो मेरे कोड उदाहरण (डी के तहत) में) समूह खंड शरीर का हिस्सा है।

आपकी क्वेरी के इस खंड मूल्यांकन किया जाता है: लेकिन दोनों हिस्सों तो दो प्रश्नों, माना जाता है कि अगर दो प्रश्नों में से प्रत्येक के तीन भागों


2. Robotsushi के जवाब शामिल होंगे एक डेटा खींचने के रूप में।

मैं "डेटा पुल" शब्द से परिचित नहीं हूं, इसलिए मुझे लगता है कि आप जो कहने की कोशिश कर रहे थे वह यह है कि क्वेरी का पहला आधा एक इकाई के रूप में निष्पादित/मूल्यांकन करता है, और फिर दूसरा क्वेरी का आधा परिणाम पहली छमाही से परिणाम लेता है और परिणामों को इसके निष्पादन/मूल्यांकन में उपयोग करता है? दूसरे शब्दों में, अवधारणात्मक रूप से हमारे पास दो प्रश्न हैं?

+2

आपके अंतिम प्रश्न के संबंध में, "शरीर" क्या है? – svick

+0

बुक ((खंड, शरीर से जहां/orderby/जहां खंड रहते हैं) और अंतिम खंड है, जो एक समूह या एक का चयन खंड हो सकता है से जाने /) को तीन भागों में क्वेरी बांट देता है। – user702769

+1

जब आप कहते हैं कि यह विभाजित हो जाता है। क्या आपका मतलब है कि चर के दायरे को विभाजित किया जाता है या एसक्यूएल क्वेरी उत्पन्न हो जाती है? – BentOnCoding

उत्तर

3

समूह ... द्वारा ...

में एक group by ऑपरेशन के बाद अनुक्रम एक अलग तरह प्रदान करने के लिए है। आप की तरह इस

IEnumerable<Key,IEnumerable<Foo>> 

अब अपने आइटम नेस्टेड दृश्यों में हैं एक दृश्य मिल द्वारा

IEnumerable<Foo> 

एक समूह के बाद और आप सीधे नहीं है:

आप इस प्रकार का अनुक्रम उन तक पहुंच यही कारण है कि पहले भाग में पहचानकर्ता दायरे से बाहर हैं। के बाद से अपने पहले भाग क्षेत्र से बाहर है, तो आप में के बाद पहचानकर्ता के साथ छोड़ दिया जाता है। यह समाप्त हो गया है और एक नई क्वेरी शुरू हो सकती है। क्वेरी का आपका दूसरा भाग पहले से कुल भिन्न अनुक्रम पर काम करता है। यह एक निरंतरता है।

from foo in foolist 
group foo by foo.name into grouped 
//foo is out of scope, you are working on a different sequence now 
//and you have a ready to use range variable for your second query 

में शामिल होने के ... पर ...

दूसरी ओर में, समूह में शामिल नहीं operation.They उस तरह दो दृश्यों जहां समूह द्वारा एक पर चल रही है पर काम करते है। वे बाएं अनुक्रम के लिए सही अनुक्रम पर मिलान तत्व प्रदान करेंगे।

IEnumerable<Left> and IEnumerable<Right> 

आपरेशन यह आप छोड़ दिया अनुक्रम से पहचानकर्ता का उपयोग करने देता के बाद, लेकिन सही में पहचानकर्ता दायरे से बाहर है। ऐसा इसलिए है क्योंकि जुड़ने से अब उनका अनुक्रम मिलता है। तो फिर आप उनके पास सीधी पहुंच नहीं है। समूह में शामिल होने का परिणाम इस तरह है:

IEnumerable<Left,IEnumerable<Right>> 

जब आप समूह में शामिल होते हैं, तो केवल दाएं रेंज चर का दायरा समाप्त हो जाता है। जबकि बायां हिस्सा अभी भी बना हुआ है, आप अभी भी एक ही अनुक्रम पर काम कर रहे हैं। आपने अभी तक एक प्रक्षेपण प्रदान नहीं किया है, इसलिए आप दूसरी क्वेरी जारी नहीं रख सकते हैं।

from left in leftList 
join right from rightList 
    on left.Key equals right.Key into joinedRights 
// left is still your range variable, you are still enumerating leftList 
// you have to provide a projection here but you won't have a ready to use range variable 
// that's why it's not a continuation. 
+0

कृपया मेरा उत्तर देखें – user702769

+0

आपकी मदद के लिए धन्यवाद – user702769

1

1) सही ... संदर्भ में शामिल होने के लिए अधिक विशिष्ट होने के लिए, समूह, या चयन खंड जो परिणाम के दायरे से बाहर होंगे, के परिणाम के लिए।

2) मुझे नहीं लगता कि आपकी क्वेरी के रूप में यह प्रयोग है में उपयोग करने का एक परिणाम के रूप में विभाजित किया गया है सबसे अधिक है:

एक समूह खंड में में के उपयोग केवल आवश्यक है जब आप करना चाहते हैं प्रत्येक समूह पर अतिरिक्त क्वेरी कार्रवाई करने

जोड़ा गया रिस्पांस

मैं w कि पढ़ा है मुर्गी का उपयोग समूह के एक हिस्से के रूप में किया जाता है या क्लॉज का चयन करता है, यह क्वेरी को दो हिस्सों में विभाजित करता है और उस सीमा के कारण क्वेरी के पहले भाग में घोषित चर हमेशा ALWAY क्वेरी के दूसरे भाग में से बाहर निकलते हैं। सही बात?

आपकी क्वेरी का यह हिस्सा एक डेटा पुल के रूप में मूल्यांकन किया जाता है। समूह कीवर्ड आपके LINQ क्वेरी का मूल्यांकन जारी रखने के लिए एक तरह से आपरेशन की आवश्यकता है:

from c1 in a1 
group c1 by c1.name into GroupResult 
चयन निम्नलिखित में

तो:

का चयन करें ...

पहले भाग से चर प्रश्न का मूल्यांकन किया जाएगा, हालांकि में कीवर्ड में आप चयन में क्वेरी के परिणामों के साथ काम कर सकते हैं क्योंकि वे GroupResult चर में संग्रहीत हैं।

लेकिन जब में शामिल होने के खंड के हिस्से के रूप में प्रयोग किया जाता है, rangle चर कभी क्वेरी के भीतर क्षेत्र से बाहर जाना (जब तक क्वेरी भी समूह ... में चयन करें ... में शामिल है या)। मुझे लगता है कि यह में शामिल होने के कारण जब खंड में शामिल होने के साथ उपयोग किया जाता है तो दो हिस्सों में क्वेरी को विभाजित नहीं किया जाता है?

क्वेरी अभी भी दो भागों में मूल्यांकन तथापि GroupResult आप क्या समूह कीवर्ड से पहले घोषित किया गया था तक पहुँच देता है। (, जहां से, खंड है) और अंत के साथ या तो समूह खंड के का चयन करना होगा

एक क्वेरी अभिव्यक्ति खंड से एक वैकल्पिक क्वेरी शरीर द्वारा पीछा के होते हैं।

यह एक परिभाषा नहीं है।

तो में वास्तव में दो हिस्सों में क्वेरी splices, निम्नलिखित उदाहरण शरीर के समूह खंड हिस्से में है:

समूह क्वेरी की पहली छमाही का हिस्सा है।

दिखाया गया यह LINQ क्वेरी केवल उत्सुक होने पर एक वर्ग कथन उत्पन्न करेगी।

2 अद्यतन

मैं शब्द "डेटा पुल" से परिचित नहीं हूँ, इसलिए मुझे लगता है कि करने के लिए है कि तुम क्या कहना चाह रहे थे जा रहा हूँ कि क्वेरी की पहली छमाही निष्पादित करता है/एक इकाई के रूप में मूल्यांकन करता है, और क्वेरी की तो दूसरी छमाही लेता पहली छमाही से परिणाम और उसके निष्पादन/मूल्यांकन में परिणाम का उपयोग करता है? दूसरे शब्दों में, अवधारणात्मक रूप से हमारे पास दो प्रश्न हैं?

हां प्रश्न के दो अलग-अलग हिस्सों हैं।

+0

कृपया मेरा उत्तर देखें – user702769

+0

क्या आप मेरा दूसरा संपादन देख सकते हैं (मैं इसे अपना अंतिम उत्तर दूंगा)? – user702769

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