c# - Selecting a property based on Name in Linq projection -
मेरे पास एक वर्ग है
सार्वजनिक वर्ग कास्टस्टोर {int DirectorateId {get; सेट; } दशमलव न्यूकार्स {get; सेट; } दशमलव ठेकेदार नया {प्राप्त करें; सेट; } दशमलव कॉन्ट्रैक्टररेन्यू {प्राप्त; सेट; } दशमलव ठेकेदार सूची {प्राप्त करें; सेट; } दशमलव ठेकेदार चोरी (प्राप्त करें; सेट; } दशमलव आंतरिक (प्राप्त करें); सेट; } दशमलव InternalRenew {get; सेट; } दशमलव InternalLost {get; सेट; } दशमलव InternalStolen {get; सेट; }}
और मेरे नियंत्रक में मुझे पता लगाना है
var c = p से _service.List ()। जहां (condition) p नीचे दिए गए फ़ंक्शन में एक सत्र चर के आधार पर अन्तर्निर्मित / आंतरिक रीन
(आदि) संपत्ति, मैं यह कैसे linq कथन में कर सकता हूँ ... किसी भी विचार (_service.List () क्लास कोस्टस्टोर के IEnumerable को सूचीबद्ध करता है
निजी स्ट्रिंग FindProperty () {स्विच (सत्र [constants.FORMSESSIONKEY] .ओस्ट्रैंक ()) {केस स्थिरांक। NETAPP: वापसी "आंतरिकनवीन"; केस स्थिरांक लौट: "आंतरिकलॉस्ट" लौटिए, केस स्थिरांक। एनईईसीएआर: रिटर्न "न्यूकार्", केस स्थिरांक। अन्य: रिटर्न "इंटरनलस्टोन", केस कॉन्स्टेंट्स। रीन: रिटर्न "इंटरनल रीन्यू"; डिफॉल्ट: वापसी स्ट्रिंग.एप्टीटी;}}
वर्तमान में मुझे यह करना पड़ता है
निजी दशमलव खोजप्रॉपर्टी () {स्विच (सत्र [Constants.FOR MSESSIONKEY]। टॉस्ट्रिंग ()) {केस स्थिरांक। NETAPP: वापसी (_costStoreService.List में पी)। जहां (पी = & gt; P.DirectorateId == _applicant.DirectorateId) p.InternalNew चुनें)। सिंगल () ?? 0.0M; मामला स्थिरांक। लौट: _costStoreService.List () में वापस (जहां से p = & gt; p.DirectorateId == _applicant.DirectorateId) p.InternalLost चुनें)। सिंगल (); मामला स्थिरांक। एनवाईसीएआर: _costStoreService.List () में वापस (जहां पी = & gt; p.DirectorateId == _applicant.DirectorateId) पी। NewCar चुनें)। सिंगल (); मामले स्थिरांक: अन्य: _costStoreService.List () में वापस (जहां पी = & gt; p.DirectorateId == _applicant.DirectorateId) चुनें पी। इनरनिस्टेलल)। सिंगल (); मामला स्थिरांक। पुन:: _costStoreService.List () में वापस (जहां पी = & gt; p.DirectorateId == _applicant.DirectorateId) p.InternalRenew चुनें)। सिंगल (); डिफ़ॉल्ट: वापसी 0.0 एम; }}
लेकिन इसके बहुत सारे डुप्लिकेट कोड, 0 मान वाले अनुक्रम के लिए भी कोई भी जांच नहीं है ...
मैं आपकी सेवा रिटर्न IQueryable & lt; T & gt;
मान रहा हूं। आप अपनी क्वेरी के बाहर प्रक्षेपण को परिभाषित करने के लिए एक अभिव्यक्ति का उपयोग कर सकते हैं:
निजी अभिव्यक्ति & lt; Func & lt; CostStore, Decimal & gt; & gt; GetProjection () {स्विच (सत्र [constants.FORMSESSIONKEY]। टॉस्ट्रिंग ()) {केस स्थिरांक। NEWAPP: वापसी c = & gt; c.InternalNew; केस स्थिरांक। लोस्ट: रिटर्न c = & gt; c.InternalLost; // ... आदि, आपको विचार डिफ़ॉल्ट मिलता है: return c = & gt; 0m; // या कुछ अन्य समझदार डिफ़ॉल्ट // ब्रेक; }}
यदि आपकी सेवा IEnumerable & lt; T & gt;
देता है, तो इसके बजाय Func & lt; CostStore, दशमलव & gt;
का उपयोग करें।
var प्रक्षेपण = GetProjection (); Var c = _service.List ()। कहां (स्थिति)। चयन (प्रोजेक्शन)
संपादित करें: इसे कन्सोल में, अध्ययन करें और सीखें।
< कोड> सिस्टम का उपयोग करना; System.Collections.Generic का उपयोग कर; System.Linq का उपयोग कर; नेमस्पेस कंसोल अनुप्रयोग 13 {क्लास प्रोग्राम {स्टैटिक व्हाइड मेन (स्ट्रिंग [] एजीआर) {var _service = new Service (); Func & lt; CostStore, bool & gt; शर्त = s = & gt; S.DirectorateId == 10; Func & lt; CostStore, दशमलव & gt; प्रक्षेपण = GetProjection (); Var c = _service.List ()। कहां (स्थिति)। चयन (प्रक्षेपण); } निजी स्थिर Func & lt; CostStore, दशमलव & gt; GetProjection () {वापसी सी = & gt; c.NewCar; } वर्ग सेवा {सार्वजनिक IEnumerable & lt; CostStore & gt; सूची () {नई सूची लौटाएं & lt; CostStore & gt; (); }} पब्लिक क्लास कोस्टस्टोर {सार्वजनिक इंट डायरेक्टोरेट आईडी {प्राप्त; सेट; } सार्वजनिक दशमलव न्यूकार्स {प्राप्त करें; सेट; }}}}
Comments
Post a Comment