2009-02-25 13 views
6

यह एक पूरी तरह से बुनियादी सवाल की तरह लगता है, लेकिन, मेरे जीवन के लिए, मैं एक सुरुचिपूर्ण समाधान नहीं कर सकता।ऑब्जेक्ट्स के लिए LINQ ऑटो वृद्धि संख्या

असल में, मैं क्वेरी से एक नई वस्तु बनाने वाली LINQ क्वेरी कर रहा हूं। नई ऑब्जेक्ट में, मैं बाद में उपयोग के लिए चयन ऑर्डर रखने की अनुमति देने के लिए एक ऑटो-वर्धित संख्या उत्पन्न करना चाहता हूं (मेरे उदाहरण में Iter नामित)।

यहाँ मेरे वर्तमान समाधान है करता है कि मैं क्या जरूरत है:

Dim query2 = From x As DictionaryEntry In MasterCalendarInstance _ 
       Order By x.Key _ 
       Select New With {.CalendarId = x.Key, .Iter = 0} 

    For i = 0 To query2.Count - 1 
     query2(i).Iter = i 
    Next 

वहाँ इतना है कि मैं पाश करने के बाद संग्रह की जरूरत नहीं है LINQ क्वेरी के संदर्भ (भीतर यह करने के लिए एक रास्ता है क्वेरी)?

उत्तर

29

क्षमा मुझे इस सी # में यकीन नहीं VB.NET में वास्तव में वाक्य रचना करने के लिए:

MasterCalendarInstance 
    .OrderBy(x => x.Key) 
    .Select((x, ixc) => new { CalendarId = x.Key, Iter = ixc }); 
+0

मुझे नहीं लगता कि यह मेरी समस्या को हल करता है। ixc मान पॉप्युलेट और ऑटो-वृद्धि कैसे प्राप्त करता है? – Nathan

+3

स्वचालित रूप से :) यह एक ओवरलोड है। चयन विधि का चयन करें जो एक Func <टी, int, TResult> लेता है (देखें http://msdn.microsoft.com/en-us/library/bb534869.aspx) – veggerby

+0

धन्यवाद मेरी समस्या हल हो गई। मैं मदद की सराहना करता हूं! – Nathan

7

अगर यह VB में संभव है मैं नहीं जानता, लेकिन सी में # एक को बंद करने का उपयोग करता है:

+0

अन्य जवाब देखें: मेरी पहली झुकाव इस// संभव है ... – Richard

+0

यह था (Gerneraly, मैं एसी # दोस्त हूँ)। हालांकि, मुझे ++ के किसी भी vb.net संस्करण से अवगत नहीं है। मैं इसे संभालने के लिए एक प्रतिनिधि विधि में चिपकने का लुत्फ उठा रहा था, लेकिन इससे मुझे इतना आसान काम पसंद है कि इससे ज्यादा जटिलता मिलती है। – Nathan

+1

+1 यह काम करता है यदि आप कोड को लैम्ब्डा सिंटैक्स के बजाय क्वेरी सिंटैक्स में रखना चाहते हैं। – Douglas

0

मैं सूची (स्ट्रिंग) के साथ एक ही समस्या को हल करने का प्रयास करते समय इस पोस्ट में भाग गया।

मैं उम्मीद करता हूं कि यह आपकी समस्या को हल करने के लिए अपनाया जा सकता है, लेकिन किसी भी अन्य व्यक्ति के लिए जो सूची (टी) के साथ इस मुद्दे में चलता है।

Dim list As New List(Of String) 
list.Add("Test1") 
list.Add("Test2") 
list.Add("Test3") 

Dim var = list.Select(Function(s) New With {.Name = s, .RecordID = list.IndexOf(s)}) 

आशा है कि इससे मदद मिलती है!

1

ऊपर समाधान इस तरह VB.NET में अभिव्यक्त किया जा सकता है:

MasterCalendarInstance _ 
    .OrderBy(Function (x) x.Key) _ 
    .Select(Function (x, ixc) New With { .CalendarId = x.Key, 
             .Iter = ixc }) 
संबंधित मुद्दे