LINQ - Ways to Write LINQ
طرق كتابة استعلامات LINQ في C#
في LINQ، يمكننا كتابة الاستعلامات بثلاث طرق رئيسية:
- Query Syntax (بناء الجملة الاستعلامي)
- Method Syntax (بناء الجملة القائم على الدوال)
- Mixed Syntax (خليط من الطريقتين)
لكل طريقة ميزاتها الخاصة، وسنتعرف عليها بالتفصيل.
1. Query Syntax (بناء الجملة الاستعلامي)
يعتمد هذا النمط على كتابة الاستعلام بطريقة مشابهة لـ SQL، ويستخدم الكلمات المفتاحية مثل from
، where
، select
.
مثال على Query Syntax
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
Console.WriteLine("الأرقام الزوجية:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
تحليل الكود:
from num in numbers
→ نحدد مصدر البيانات.where num % 2 == 0
→ نحدد الشرط (الأرقام الزوجية فقط).select num
→ نحدد البيانات التي سيتم إرجاعها.
✳ متى نستخدم Query Syntax؟
- عندما يكون الاستعلام معقدًا ويحتوي على Grouping أو Joins.
- عندما يكون الكود بحاجة إلى أن يكون أقرب إلى SQL لسهولة الفهم.
2. Method Syntax (بناء الجملة القائم على الدوال)
يعتمد هذا النمط على استدعاء دوال LINQ مثل Where()
و Select()
مباشرةً على IEnumerable أو IQueryable.
مثال على Method Syntax
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(num => num % 2 == 0);
Console.WriteLine("الأرقام الزوجية:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
تحليل الكود:
numbers.Where(num => num % 2 == 0)
→ يعادل جملةwhere
في Query Syntax.- يتم استخدام Lambda Expressions لتعريف الشروط.
✳ متى نستخدم Method Syntax؟
- عندما نحتاج إلى كتابة استعلامات قصيرة.
- عند العمل مع Entity Framework حيث أن
IQueryable
يدعم Method Syntax بشكل أفضل.
3. Mixed Syntax (خليط بين الطريقتين)
يمكننا دمج Query Syntax مع Method Syntax حسب الحاجة.
مثال على Mixed Syntax
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = (from num in numbers
where num % 2 == 0
select num).ToList();
Console.WriteLine("الأرقام الزوجية:");
evenNumbers.ForEach(Console.WriteLine);
}
}
تحليل الكود:
- يتم كتابة الاستعلام باستخدام Query Syntax.
- يتم تحويل النتيجة إلى List باستخدام
ToList()
من Method Syntax.
✳ متى نستخدم Mixed Syntax؟
- عندما نريد الاستفادة من مرونة Method Syntax مع وضوح Query Syntax.
- عندما نحتاج إلى تحويل النتيجة إلى List أو Array.
مقارنة بين الطرق الثلاث
الطريقة | الوضوح | الأداء | الأفضلية |
---|---|---|---|
Query Syntax | سهل القراءة (خاصة مع SQL Developers) | جيد لكنه قد يكون أقل كفاءة | عندما يكون الاستعلام معقدًا |
Method Syntax | أكثر مرونة ولكن يحتاج خبرة بالـ Lambda | أكثر كفاءة في Entity Framework | للاستعلامات القصيرة والسريعة |
Mixed Syntax | متوازن بين الوضوح والمرونة | يعتمد على الاستخدام | عند الحاجة للدمج بين الطريقتين |
الخلاصة:
- Query Syntax مناسب للاستعلامات المعقدة مثل Grouping و Joins.
- Method Syntax أكثر مرونة ومفضل مع EF.
- Mixed Syntax يجمع بين الوضوح والمرونة.
🎯 نصيحة:
🔹 استخدم Query عندما تفضل الوضوح
🔹 استخدم Method عندما تحتاج المرونة
🔹 امزج بينهما عند الحاجة
تعليقات
إرسال تعليق