جمعية واحدة إلى واحدة والتصفية في لينك
-
19-09-2019 - |
سؤال
دعنا نقول أن لدي طاولان (Address
و Phone
) في SQL التي لها علاقة واحدة إلى واحدة. لقد قمت بإنشاء LinQ المطابق لفصول SQL وتغيير الارتباط إلى OneToOne
أريد استرداد كلا الكائنتين عن طريق تصفية كائن الطفل. على سبيل المثال، لدي الاستعلام التالي الذي يعمل بشكل جيد:
var n = db.Addresses.Where(t => t.Phone.Number == 100);
هل هناك أي طريقة يمكنني تقديم العمل التالي:
var n = db.Addresses.Where(t => t.Phone == new Phone(100));
ال Phone
منشئ الطبقة أعلاه تهيئة Number
منشأه. كما أستطيع أن أرى الاستعلام المصدر يحتوي على جملة يقوم بمرشحات جدول الهواتف حسب المعرف (المفتاح الأساسي) ولكن جملة الأرقام غير المدرجة.
إذا قمت بتعيين Number
ككل مفتاح أساسي في Visual Studio، يتم تضمينه في جملة WHERE ولكن البحث لا يزال لا يعيد أي شيء كقيمة المعلمة لمعرف هو 0. حتى لو كان يعمل، ليس حلا كما هو الحال Number
لا ينبغي أن يكون المفتاح الأساسي.
المحلول
ما تسأله لا معنى له تماما. إذا كنت تريد أن يعطى عنصر الهاتف العنوان، فكن لديك هذا عن طريق الوصول إلى خاصية الهاتف.
لا يمكنك تهيئة نوع واستخدامه إلى المشروع على أنه DLINQ، حيث يتم ترجمة الاستعلام إلى DB. يمكنك القيام بذلك على LinQ إلى الكائنات، ولكن ستجبرك على تعداد قائمتك، والتي من شأنها أن تجلب جميع معلومات قاعدة البيانات في الذاكرة، والتي قد لا تكون جيدة للأداء ...
أنا لا أرى القضية هنا؟ لديك العنوان، البحث عن العمل عليه، ويمكنك الوصول إلى خاصية الهاتف عن طريق الوصول إلى خاصية العنوان.