Differences Between LINQ JOIN and GROUP JOIN Methods
Differences Between LINQ JOIN and GROUP JOIN Methods
في LINQ، تُستخدم دالتي Join وGroupJoin لربط مجموعتين من البيانات بناءً على مفتاح مشترك، لكنهما تختلفان في كيفية التعامل مع النتائج وطريقة العرض.
دالة Join:
- الغرض: تنفيذ عملية Inner Join بين مجموعتين، حيث تُعاد فقط العناصر التي تتطابق مفاتيحها في كلا المجموعتين.
- النتيجة: تُعيد مجموعة مسطحة (flat) من العناصر المتطابقة.
مثال على استخدام Join:
var result = from c in categories
join p in products on c.CategoryId equals p.CategoryId
select new { c.CategoryName, p.ProductName };
في هذا المثال، يتم ربط المجموعتين categories
وproducts
على أساس CategoryId
، وتُعاد فقط الأزواج التي يوجد لها تطابق في كلا المجموعتين.
دالة GroupJoin:
- الغرض: تنفيذ عملية Group Join، حيث تُعاد كل العناصر من المجموعة الخارجية مع مجموعة من العناصر المتطابقة من المجموعة الداخلية.
- النتيجة: تُعيد مجموعة هرمية (hierarchical) حيث يكون لكل عنصر من المجموعة الخارجية مجموعة من العناصر المتطابقة من المجموعة الداخلية.
مثال على استخدام GroupJoin:
var result = from c in categories
join p in products on c.CategoryId equals p.CategoryId into productsGroup
select new { c.CategoryName, Products = productsGroup };
في هذا المثال، يتم ربط المجموعتين categories
وproducts
على أساس CategoryId
، وتُعاد كل فئة مع مجموعة المنتجات المرتبطة بها. إذا لم يكن هناك منتجات مرتبطة بفئة معينة، ستكون المجموعة فارغة.
الاختلافات الرئيسية:
-
بنية النتيجة:
- Join: تُعيد مجموعة مسطحة من الأزواج المتطابقة.
- GroupJoin: تُعيد مجموعة هرمية حيث يكون لكل عنصر من المجموعة الخارجية مجموعة من العناصر المتطابقة من المجموعة الداخلية.
-
التعامل مع العناصر غير المتطابقة:
- Join: يتم تجاهل العناصر التي لا يوجد لها تطابق في المجموعة الأخرى.
- GroupJoin: تُعاد كل العناصر من المجموعة الخارجية، مع مجموعة فارغة إذا لم يكن هناك تطابق في المجموعة الداخلية.
-
الاستخدامات الشائعة:
- Join: مناسب عندما تحتاج إلى قائمة مسطحة من النتائج المتطابقة فقط.
- GroupJoin: مناسب عندما تحتاج إلى الحفاظ على البنية الهرمية للبيانات، مثل الحصول على كل فئة مع المنتجات المرتبطة بها.
مثال توضيحي:
لنفترض أن لدينا قائمة بالفئات (categories
) وقائمة بالمنتجات (products
)، وكل منتج مرتبط بفئة عبر CategoryId
.
باستخدام Join، يمكننا الحصول على قائمة مسطحة تحتوي على اسم الفئة واسم المنتج لكل تطابق.
باستخدام GroupJoin، يمكننا الحصول على كل فئة مع قائمة المنتجات المرتبطة بها، مما يحافظ على البنية الهرمية للبيانات.
تعليقات
إرسال تعليق