اتقان Linq: كيفية تحويل استعلامات SQL إلى صيغة Linq
عند العمل مع قواعد البيانات في .NET، يواجه المطورون غالبًا الحاجة إلى تحويل استعلامات SQL إلى صيغة Linq. أحد السيناريوهات الشائعة هو استخدام استعلام فرعي مع IN
لتصفية النتائج بناءً على جدول آخر. ستوجهك هذه المدونة خلال عملية تحويل عبارة SQL SELECT
التي تستخدم IN
إلى تعبير Linq المقابل. بنهاية هذا المقال، ستكون لديك المعرفة اللازمة للتعامل مع استعلامات مشابهة في مشاريعك الخاصة!
فهم المشكلة
يبدو استعلام SQL الذي نريد ترجمته على النحو التالي:
SELECT Id, Name FROM TableA WHERE TableA.Id IN (SELECT xx from TableB INNER JOIN Table C....)
بعبارات أبسط، الهدف هو اختيار Id
و Name
من TableA
، مع تصفية النتائج حيث يتواجد Id
في مجموعة فرعية من القيم المشتقة من استعلام ثانٍ يستخدم الربط.
تحليل الحل
لتحويل هذه العبارة SQL إلى استعلام Linq، اتبع الخطوات التالية:
- تحديد الجداول: نحن نتعامل مع ثلاثة جداول:
TableA
وTableB
وTableC
. - تحديد العلاقة: يتضمن الاستعلام الفرعي ربطًا، مما يعني أنه يتعين علينا النظر في كيفية ارتباط
TableB
وTableC
للعثور على المعرفات المحددة. - بناء استعلام Linq: في Linq، يمكننا استخدام استعلام متداخل كمرشح.
هيكل استعلام Linq
إليك المعادل Linq للاستعلام SQL المقدم:
from a in TableA
where (from b in TableB
join c in TableC on b.id equals c.id
where ... // (ظروف تصفية إضافية إذا لزم الأمر)
select b.id).Contains(a.Id)
select new { a.Id, a.Name }
تحليل استعلام Linq
- الاستعلام الخارجي:
- نبدأ بـ
from a in TableA
، وهو مشابه لاختيار من الجدول الرئيسي.
- نبدأ بـ
- الاستعلام الداخلي:
- الجزء الداخلي:
from b in TableB join c in TableC on b.id equals c.id
- وهذا يقوم بربط
TableB
بـTableC
بناءً على مطابقات المعرفات، مما يسمح لنا بتصفية النتائج بشكل فعال.
- شرط التصفية:
- يمكن استبدال أو توسيع سطر
where ...
داخل الاستعلام الداخلي بشروط إضافية حسب الحاجة.
- يمكن استبدال أو توسيع سطر
- تحقق من الاحتواء:
- نتيجة الاستعلام الداخلي،
select b.id
، يتم تغليفها في استدعاء.Contains(a.Id)
لضمان أننا نقوم بتضمين المعرفات التي تم العثور عليها فقط في مجموعة النتائج.
- نتيجة الاستعلام الداخلي،
- الاختيار النهائي:
- أخيرًا،
select new { a.Id, a.Name }
يسمح لنا بتشكيل الناتج النهائي ليشمل فقط الحقول المطلوبة.
- أخيرًا،
الخاتمة
يمكن أن يساعد تحويل استعلامات SQL إلى Linq في تسريع عمليات البيانات واستغلال قوة C# مع الحفاظ على القراءة والأداء. إن اتقان هذه العملية التحويلية لا يعزز مهاراتك كمطور فحسب، بل يساعد أيضًا في كتابة كود أنظف وأكثر سهولة في الصيانة.
إذا كان لديك أي أسئلة إضافية حول استخدام Linq في مشاريعك، أو عن تحويلات SQL إلى Linq الأخرى، فلا تتردد في الوصول إلينا في التعليقات أدناه. ترميز سعيد!