Single و SingleOrDefault في LINQ
LINQ Single() و SingleOrDefault()
في هذا الدرس، سنتعرّف على الفرق بين دالتي Single()
وSingleOrDefault()
في LINQ، ومتى نستخدم كل واحدة منهما.
الفرق الأساسي:
الدالة | ترجع عنصرًا واحدًا؟ | ترمي استثناء لو مفيش؟ | ترمي استثناء لو فيه أكتر من واحد؟ | ترجع القيمة الافتراضية لو مفيش؟ |
---|---|---|---|---|
Single() |
✅ | ✅ | ✅ | ❌ |
SingleOrDefault() |
✅ | ❌ | ✅ | ✅ |
مثال على Single():
List<int> numbers = new List<int>() { 5 };
int result = numbers.Single(); // 5
Console.WriteLine(result);
مثال على SingleOrDefault():
List<int> numbers = new List<int>();
int result = numbers.SingleOrDefault(); // 0
Console.WriteLine(result);
استخدام مع شرط:
List<int> numbers = new List<int>() { 2, 4, 6, 8 };
int result = numbers.Single(n => n == 6); // ✅ 6
// هذا يرمي استثناء لأنه فيه أكثر من عنصر > 3
int error = numbers.Single(n => n > 3);
مثال مع كائنات:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
List<Student> students = new List<Student>()
{
new Student() { ID = 1, Name = "Ali" },
new Student() { ID = 2, Name = "Sara" },
new Student() { ID = 3, Name = "Ali" }
};
Student result = students.SingleOrDefault(s => s.ID == 2); // Sara
// هذا يرمي استثناء لأن فيه أكثر من طالب اسمه "Ali"
Student error = students.Single(s => s.Name == "Ali");
ملاحظات مهمة:
- استخدم
Single()
لما تتأكد إن فيه عنصر واحد فقط ينطبق عليه الشرط. - استخدم
SingleOrDefault()
لما تتوقع إن العنصر ممكن ما يكونش موجود. - لو فيه احتمال يرجع أكثر من عنصر → استخدم
FirstOrDefault()
أوWhere()
.
تعليقات
إرسال تعليق