LINQ TakeWhile Method

شرح دالة TakeWhile() في LINQ

في هذا الدرس، سنتعرّف على دالة TakeWhile() في LINQ، والتي تُستخدم لاستخراج العناصر من بداية التسلسل طالما أن شرطًا معينًا محقق. بمجرد أن يفشل الشرط لأول مرة، تتوقف عن جلب المزيد من العناصر، حتى لو كانت بقية العناصر تحقق الشرط.



الصيغة العامة:


var result = collection.TakeWhile(condition);
  • condition: شرط من نوع Func<T, bool> يُطبّق على كل عنصر.


مثال عملي:


List<int> numbers = new List<int>() { 5, 10, 15, 6, 3, 20 };

var result = numbers.TakeWhile(n => n < 15);

foreach (var number in result)
{
    Console.WriteLine(number);
}


الناتج:


5  
10
تم التوقف عند 15 لأنه لا يحقق الشرط n < 15، حتى لو أن 6 و3 بعده تحقق الشرط.



الفرق بين Take و TakeWhile:

الدالة تعتمد على طريقة الإيقاف
Take(n) عدد تأخذ أول n عناصر دائمًا
TakeWhile(condition) شرط تأخذ العناصر طالما الشرط محقق


مثال باستخدام كائنات:


public class Product
{
    public string Name { get; set; }
    public int Price { get; set; }
}

List<Product> products = new List<Product>
{
    new Product() { Name = "Keyboard", Price = 200 },
    new Product() { Name = "Mouse", Price = 150 },
    new Product() { Name = "Monitor", Price = 300 },
    new Product() { Name = "CPU", Price = 100 }
};

var result = products.TakeWhile(p => p.Price < 250);

foreach (var product in result)
{
    Console.WriteLine(product.Name);
}


الناتج:


Keyboard  
Mouse
تم التوقف عند "Monitor" لأن سعره 300، وهو لا يحقق الشرط Price < 250.



ملاحظات مهمة:

  • TakeWhile() تعمل فقط من البداية. لا ترجع إلى العناصر التالية بعد فشل الشرط.
  • إذا كان أول عنصر لا يحقق الشرط → تُرجع مجموعة فارغة.
  • لا توجد دالة TakeWhileOrDefault() لأن النتيجة عبارة عن تسلسل وليس عنصر واحد.


تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework