سؤال

اصطدمت بموقف غريب هنا.محاولة استخراج السيارات من قاعدة بيانات SQL ضمن نطاق معين من الموضع (خط العرض/الطول) وإرجاع IQueryable للقيام بمنطق إضافي في مجموعة النتائج بعد ذلك.

public IQueryable<Car> QueryAllCarsByDistance(float latitude, float longitude, int distance)
{
    var cars = from car in QueryAllCars()
               join i in sqlContext.QueryContactsByDistance(latitude, longitude, distance)
               on car.ContactId equals i.Id
               orderby i.Distance
               select car;

    return cars;
}

يقوم QueryContactByDistance بتشغيل وظيفة في قاعدة بيانات SQL ويقوم QueryAllCars بإرجاع جميع السيارات من قاعدة البيانات.

سؤالي الآن هو:كيف يمكنني إلحاق المسافة (i.Distance) بالسيارة؟لا أرغب في تحديد سيارة جديدة { المسافة = i.Distance، Id = car.Id، ...}.ولكن كيف يمكن إلحاق هذه القيمة الإضافية بكائن السيارة؟

هل كانت مفيدة؟

المحلول

لسوء الحظ لا توجد طريقة للقيام بذلك.بالنسبة لمعظم أغراض الترميز العادية، النوع تعريفات المنبعثة من C# وVB.Net غير قابلة للتغيير.لا يمكن إضافة الحقول والخصائص أو إزالتها منها في وقت التشغيل.

كل ما يمكنك فعله هو إنشاء نوع جديد يلتف حول نوع السيارة ويوفر الخاصية الإضافية.أو قم بإنشاء AnonymousType الذي يحتوي على كافة الخصائص المطلوبة.

نصائح أخرى

وطريقة واحدة حول هذا هو أنك يمكن أن الإعداد فئة جزئية لهذا (إذا كنت havn't بالفعل) إضافة خاصية جديدة إلى أنه دعا DistanceToReferencePoint، ثم في الاستعلام تعيين هذا العقار لمسافة، بعد ذلك لن يتم حفظها في قاعدة البيانات ولكن سوف اعطيكم الوصول إليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top