How to code this generic type C# snippet? -
प्रत्येक इकाई प्रकार के लिए सरलीकृत दोहराया कोड
सार्वजनिक IList & lt; entity1 & gt; GetEntity1 (.. क्वेरी पैरामीटर ..) {IQueryable & lt; entity1 & gt; Query = context.entity1; क्वेरी = refDataType से क्वेरी में जहां refDataType.Id & gt; 0 चयन करें refDataType; । । प्लस प्रत्येक इकाई के लिए क्वेरी के लिए और अधिक परिवर्तन। वापसी क्वेरी। टूलिस्ट (); }
मैं एक जेनेरिक फ़ंक्शन बनाना चाहता था जो कि क्वेरी बनाता है, लेकिन यह सुनिश्चित नहीं है कि इसके बारे में कैसे जाना जाए?
यानी निम्न स्निपेट में, मैं कैसे कोड रिटायरएगनरिकॉक्वायरी के लिए?
<पूर्व> सार्वजनिक आईएलआईआईटी & lt; entity1 & gt; GetEntity1 (.. क्वेरी पैरामीटर ..) {IQueryable & lt; entity1 & gt; Query = context.entity1; Query = ReturnAGenericQuery प्रकार की इकाई 1 वापसी क्वेरी। ToList (); } सार्वजनिक IList & lt; entity2 & gt; GetEntity2 (.. क्वेरी पैरामीटर ..) {IQueryable & lt; entity2 & gt; Query = context.entity2; Query = ReturnAGenericQuery प्रकार की इकाई 2 वापसी क्वेरी। ToList (); } निजी IQueryable & lt; T & gt; ReturnAGenericQuery & LT; टी & gt; () {Entity1 या entity2} के IQueryable वापस {/ code>
आपका उदाहरण थोड़ा अस्पष्ट है, लेकिन ऐसा लगता है कि आपको इस की तर्ज पर कुछ की आवश्यकता है:
निजी IQueryable & lt; T & gt; ReturnAGenericQuery & lt; T & gt; (IQueryable & lt; T & gt; स्रोत) जहां टी: SomeBaseTypeForAllEreEntities {IQueryable & lt; T & gt; रिजल्ट = refredataType से स्रोत में जहां refDataType.Id & gt; 0 चयन करें refDataType; // अन्य सामान यहां परिणाम निकालते हैं; } सार्वजनिक IList & lt; Entity1 & gt; GetEntity1 (...) {वापसी रिटर्नएग्रेनरिक्य्युनिकेशन (context.entity1) .ओलिस्ट (); }
कारण आपको ' की आवश्यकता है, जहां टी:
' खंड इसलिए है क्योंकि टी को एक प्रकार की होनी चाहिए जिसे संपत्ति है ' Id
'आपके LINQ के लिए जहां-कार्य करने के लिए कार्य किया गया है ... ताकि आपको एंटिटी 1 और एंटिटी 2 को बेस क्लास से प्राप्त करना होगा जो कि संपत्ति को परिभाषित करता है यदि आप 'अन्य सामान' के लिए किसी भी अन्य संपत्ति की आवश्यकता है तो उन्हें आधार वर्ग में भी जोड़ना होगा।
परिशिष्ट: अगर context.entity1
(जो संग्रह को संदर्भित करता है) एक IQueryable & lt; entity1 & gt;
नहीं है, तो आपको इसके बजाय context.entity1.AsQueryable ()
का उपयोग करने की आवश्यकता हो सकती है।
मूल रूप से मेरी क्वेरी गलत थी, यह से स्रोत के संदर्भ में से ... दोहरा <क्वेरी> क्वेरी करना था। बशर्ते आपके पास सही प्रकार का विरासत ढांचा (नीचे देखें), यह ठीक ठीक है। सार्वजनिक वर्ग SomeBaseTypeForAllYourEntities {सार्वजनिक इन्ट आईडी (प्राप्त करें; सेट; }} सील पब्लिक क्लास Entity1: SomeBaseTypeForAllEreEntities {... अन्य गुण, आदि ...}
Comments
Post a Comment