2011-03-17 5 views
6

में एक आईनेमेरेबल में एक कॉलम जोड़ें मुझे नहीं लगता कि मैं वास्तव में मौजूदा आईनेमरेबल में फ़ील्ड (कॉलम) जोड़ सकता हूं। लेकिन मैं जो चाहता हूं वह एक नया आईनेमरेबल है जो एक गणना किए गए क्षेत्र के साथ मौजूदा आईनेमरेबल से लिया गया है।सी #

var db = Database.Open("LOS"); 
var ie = db.Query(sqlAssignments); 

// make a new ie2 that has an extra field 
// ??? ie2 <=== ie with new field c = ie.a + ie.b 

var grid = new WebGrid(ie2, extra parameters); 

मुझे पता है यानी की सभी पंक्तियों के माध्यम से इस पाशन कैसे करना है: WebMatrix में स्यूडोकोड वेब पेज का उपयोग कर की तरह लग रहा है। लेकिन मुझे उम्मीद है कि कुछ और सुरुचिपूर्ण है।

+2

IEnumerable बस एक गणनीय प्रकार है, यानी एक उपभोक्ता के माध्यम से यह घटक आइटम है की गणना कर सकते हैं का प्रतीक है। इसमें 'फ़ील्ड' या 'कॉलम' की कोई अवधारणा नहीं है। –

+4

@Adam - अभी तक मुझे लगता है कि अधिक लोगों को * उस शीर्षक से समझने की संभावना है, उदाहरण के लिए: "पुराने अनुक्रम के आधार पर एक नया अनुक्रम बनाने के लिए प्रक्षेपण का उपयोग करें, लेकिन अतिरिक्त सदस्यों के साथ" ... –

उत्तर

6

के बारे में कैसे:

var ie2 = ie.Select(x => new { x.Foo, x.Bar, Sum = x.Abc + x.Def }); 
var grid = new WebGrid(ie2); 
+0

यह बहुत अच्छा काम करता है, लेकिन विचित्र रूप से एक नई समस्या का कारण बन गया है जहां वेबग्रिड अब स्वचालित रूप से टाइप नहीं करता है :(मैंने इसे एक नया प्रश्न बनाने का फैसला किया। – Knox

+0

@ कनॉक्स - बस i2.ToList() –

+0

का उपयोग करें मैंने टोलिस्ट की कोशिश की, लेकिन यह अभी भी सॉर्ट नहीं हुआ इस प्रश्न को नए प्रश्न में मॉर्फ करने के बजाय, मैंने एक नया प्रश्न पूछा। Http://stackoverflow.com/questions/5339335/add-a-column-to-an-ienumerable-in-c-such-that-it -works-with-webgrid – Knox

3
ie2 = ie.Select(v => new {v.a, v.b, c = v.a + v.b}); 
4

आप Select का उपयोग कर ऐसा कर सकते हैं। इसे आज़माएं:

ie2 = ie.Select(e => new { IE = e, NewParam = e.X+e.Y }); 
+1

मेरे बारे में एक टिप्पणी यह ​​है कि अधिकांश डेटा-बाध्यकारी केवल एक स्तर नीचे दिखता है; आपको आमतौर पर गुणों को फ़्लैट करना होगा 'ई' के, अन्यथा आप केवल एसी होगा मूल्य के रूप में 'e.ToString()' के साथ 'e' नामक' स्तंभ। –

+0

यदि ऐसा है, तो आपको अपने जवाब के रूप में फ़्लैट करना होगा। यदि यह केवल एक स्तर को देखता है, तो आइए उम्मीद करें कि 'ई' पर गुणों की संख्या प्रबंधनीय है :) –

+0

मुझे यह तुरंत काम करने के लिए नहीं मिला, और इसे फ़्लैट करने का फैसला किया। सौभाग्य से, ई पर केवल 10 गुण हैं। – Knox

2

लिंक का उपयोग करना!

var newIe = from item in ie 
      select new {item.NewField, item.OldFiedl1 etc... } 

इसके अलावा, शायद सबसे अच्छा है कि गुमनाम नामित प्रकार बनाने के लिए (यदि आप इस विधि के बाहर का उपयोग करना चाहते हैं)।

2

सबसे पहले, IEnumerable शायद कुछ - एक ऑब्जेक्ट की एक सूची है। वह वस्तु है जिसे आप बढ़ा सकते हैं।

आप शायद कुछ इस तरह कर सकते हैं:

var ie = db.Query(...); 
var ie2 = ie.Select(i => new MyIe2Object { 
    Prop1 = i.Prop1, 
    NewProp = i.Prop1 + i.Prop2 
}); 
+0

जब LINQ शामिल हो जाता है, मुझे नहीं लगता कि "सूची" अनुमान लगाना सच है - लेकिन यकीन है कि * कुछ * काम करना * काम करेगा, –

+0

बिंदु यह है कि यह वास्तव में 'IENumerable' को विस्तारित करने के बारे में नहीं है, लेकिन *कुछ कुछ*। –

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

  • कोई संबंधित समस्या नहीं^_^