में मैपिंग अभिव्यक्तियां मेरे पास एक सारणी कक्षा है जिसे दो वर्गों द्वारा विरासत में मिला है। दोनों वर्ग डेटाबेस में टेबल का प्रतिनिधित्व करते हैं। मुझे अमूर्त वर्ग में अभिव्यक्तियों को मैपिंग में परेशानी हो रही है और इसलिए मुझे अपवाद मिलते हैं कि इसका अनुवाद एसक्यूएल में नहीं किया जा सकता है। स्टैकओवरफ्लो में मिले सभी प्रश्न कॉलम के बारे में बात कर रहे हैं जो पहले से ही मेरे लिए काम कर रहा है।LINQ-to-sql अमूर्त वर्ग
नीचे एक बहुत ही सरल कोड है जो दिखाता है कि मेरा क्या मतलब है। कार और मोटरसाइकिल में _isNew अभिव्यक्ति के पूरी तरह कार्यान्वयन है।
public abstract class Vehicle {
public abstract boolean IsNew;
}
public partial class Car: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
public partial class Motorcycle: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
मैं एक IQueryable पर या तो _isNew अभिव्यक्ति या IsNew संपत्ति कॉल करने के लिए सक्षम होने के लिए चाहते हैं और अभी तक इसे चलाता मामले वाहन में कार वर्ग की _isNew कार का प्रकार है। क्या वैसे भी मैं इसे पूरा कर सकता हूं? मेरे द्वारा किए गए सभी समाधानों ने अपवाद का कारण बना दिया कि इसका अनुवाद एसक्यूएल में नहीं किया जा सकता है।
'_isNew' क्या है? एक अभिव्यक्ति नहीं हो सकती है जिसे * अनुवादित किया जा सकता है? –
_isNew एक अभिव्यक्ति एसक्यूएल (करने के लिए अनुवाद किया जा सकता है कि जैसे कारों के लिए अभिव्यक्ति <समारोह <वाहन, bool >> _isNew = (v) => v.Age <2; मोटरसाइकिल के लिए अभिव्यक्ति <समारोह <वाहन, bool >> _isNew = (v) => v.Age <1; (पीएस: आयु एक डीबी कॉलम है) मेरा मुख्य मुद्दा यह है कि मैं वंचित वर्ग के आधार पर वाहन पर सही _isNew को कैसे लागू कर सकता हूं। कॉलिंग फ़ंक्शन IsNew SQL अनुवाद त्रुटि का कारण बनता है और मैं यह तय नहीं कर सकता कि किस प्रकार IINew को बिना किसी प्रकार की जांच किए और बिना किसी कास्टिंग किए। – Sami
मुझे लगता है कि यह बिल्कुल काम नहीं करेगा क्योंकि IsNew के ओवरराइड को कॉल करने के लिए कार या मोटरसाइकिल का एक ठोस उदाहरण आवश्यक होगा। नतीजतन ईएफ को उन उदाहरणों को बनाने के लिए पहले आइटमों से पूछना होगा। – Peit