युक्त रीफैक्टरिंग विधि में मुझे एक विधि को दोबारा करने का सबसे अच्छा तरीका तय करना है जिसमें LINQ क्वेरी शामिल हैं जो बहुत समान हैं लेकिन समान नहीं हैं।LINQ क्वेरी
एक तरीका है जिसके इन पंक्तियों के साथ कुछ है पर विचार करें: सिर्फ एक उदाहरण
public SomeObject GetTheObject(IMyObject genericObject) {
Type t = genericObject.GetType();
SomeObject so = null;
switch(t.Name) {
case "Type1":
var object1 = (from o in object1s where o.object1id == genericObject.id).FirstOrDefault();
so = (SomeObject)object1;
break;
case "Type2":
var object2 = (from o in object2s where o.object2id == genericObject.id).FirstOrDefault();
so = (SomeObject)object2;
break;
default:
break;
}
return so;
}
यह वह जगह है, लेकिन कल्पना मैं एक अलग क्वेरी (यह एक अलग ObjectSet का उपयोग करता है में अलग निष्पादित करने के लिए की आवश्यकता होगी, कर रहा हूँ, थोड़ा का उपयोग करता है विभिन्न फ़ील्ड (object1id बनाम object2id) और एक अलग प्रकार देता है। इसके अलावा, प्रश्न समान हैं।
क्या इस तरह की विधि को दोबारा करने का कोई समझदार तरीका है? ऐसा लगता है जैसे मैंने कुछ स्पष्ट याद किया है। शायद मुझे सटीक विधि का उपयोग करना होगा और मैं क्वेरी को दोबारा लिखने से नहीं बच सकता, यह सिर्फ से है मुझे पसंद है जैसे किसी भी तरह से सक्षम होना चाहिए!
किसी भी संकेत दिए गए बहुत सराहना
मैं प्रतिबिंब के साथ यह कोशिश की, लेकिन अतीत LINQ बयान नहीं मिल सका ("ओ ऑब्जेक्ट 1 में जहां o.object1id")। आपको गतिशील रूप से LINQ कथन उत्पन्न करना चाहिए। – Graham
हाय ग्राहम, यह निश्चित रूप से इस तथ्य को छोड़कर एक विकल्प होगा कि मैं एक रिपोजिटरी में डीएएल को एन्सेप्लेटेड रखने की कोशिश कर रहा हूं जो मुझे उन तरीकों से प्रतिबंधित करता है जिन्हें मैं गतिशील रूप से क्वेरी बनाने के लिए उपयोग कर सकता हूं। मैंने कंक्रीट रिपोजिटरी इंस्टेंस को वापस करने के लिए एक कारखाने का निर्माण करने की कोशिश की। लेकिन इसने मुझे एक समान स्थिति में छोड़ दिया जैसा कि मैंने पाओलो को बताया था, अर्थात् क्योंकि मेरे रिपोजिटरी को एक ठोस EntityObject प्रकार की आवश्यकता होती है, कि मैं एक इंटरफेस के चारों ओर एक नहीं बना सकता। –
dougajmcdonald