تعتبر فلترة البيانات واحدة من اكثر المهارات المستخدمة اثناء البرمجة والتى يجب ان يتقنها المطور جيدا . وهى عباره عن عملية ترشيح النتائج لتشمل فقط التى ينطبق عليها الشروط التى تم تحديدها .
كمثال لما ذكرنا حاول ان تتخيل انك تبحث عن التفاح فقط وتريد جمعة من سلة تحتوى على اكثر من نوع من الفاكهة . لذا فى هذا المقال سنتعرض لطرق تصفية كلاس List<T>
سنقوم مبدئيا بانشاء كلاس الموظفين والذى يحمل تفاصيل الموظف والتى تم التصريح عنها فى حقول خاصة للاسم والكود والقسم لكل موظف وقمنا بوضع getter , setter لنتمكن من اعطائها قيم واستدعائها مرة اخرى وقت الحاجة .
كالاتى :
public class Employee
{
private string _name;
private int _id;
private string _department;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Id
{
get { return _id; }
set { _id = value; }
}
public string Department
{
get { return _department; }
set { _department = value; }
}
}
داخل كلاس Program سننشئ ميثود والتى ستقوم بملئ قائمة List والتى سنضع فيها عناصر من كلاس الموظفين الذى انشئناه من قبل .سيكون لكل موظف اسم وكود وقسم
public static void ListOperations()
{
List employees = new List()
{
new Employee(){ Id=1, Name="John Doe", Department="Software"},
new Employee(){ Id=2, Name="Angela Su", Department="Sales"},
new Employee(){ Id=3, Name="Frank Kelvin", Department="Marketing"},
new Employee(){ Id=4, Name="Joe Dustin", Department="Sales"},
new Employee(){ Id=5, Name="Glory GG", Department="Software"},
new Employee(){ Id=6, Name="Antonella Cruz", Department="Marketing"},
new Employee(){ Id=5, Name="Andrew Logan", Department="Software"},
new Employee(){ Id=6, Name="Billy Cruz", Department="Marketing"},
new Employee(){ Id=5, Name="Sally Jane", Department="Software"},
new Employee(){ Id=4, Name="Jon Snow", Department="Sales"},
};
}
ان الكود السابق هو تصريح عن قائمة الموظفين فى ميثود LisOperation ونريد الان فلترة هذة القائمة للحصول الموظفين الذين هم فى قسم السوفت وير.
هناك اكثر من طريقة فى سى شارب لذا سوف نتناول هذة الطرق كالاتى :
كيف يمكن فلترة القائمة باستخدام طريقة iterative
هذة الطريقة تقوم بعمل لووب او دوران على عناصر القائمة والبحث عن العضو الذى يطابق الشرط مثل المثال الاتى الذى يوضح هذة الطريقة
Console.WriteLine("Filtering through the Employee list using the Iterative method");
//goal: Filter through the list to get employees in the company’s software //department
foreach (var employee in employees)
{
if(employee.Department == "Software")
{
Console.WriteLine(employee.Name);
}
}
كيف يمكن الفلترة باستخدام طريقة Linq Query
ما هو Linq Query. هو استعلام متكامل لغوى وهو طريقة قوية لجلب واسترجاع البيانات من اى datat source فى لغة سى شارب
وهى تعمل من خلال شرط where لتصفية القائمة ثم ارجاع قائمة جديدة تحتوى على العناصر المطلوبة بناءا على معيار معين
Console.WriteLine("\nWhere clause - LINQ query syntax ");
var filteredResults = from employee in employees
where employee.Department == "Software"
select employee.Name;
//Looping through your filtered results
foreach(var result in filteredResults)
{
Console.WriteLine(result);
}
فى الكود السابق يستخدم بناء استعلام Linq شرط where لتصفية الموظفين الذين يعملون فى قسم السوفت وير من القائمة الاصلية ثم قمنا بعمل دوران على عناصر القائمة لطباعتها
كيفية التصفية من خلال قائمة باستخدام تركيب LINQ Method
على عكس الطريقة السابقة فإن هذة الطريقة تعمل من خلال تعبير Lambda حيث يتم تمرير تعبير لامبدا لفلترة القائمة ويتم توضيح ذلك فى المثال الاتى:
Console.WriteLine("\nWhere clause - LINQ method syntax ");
var filteredResultsTwo = employees.Where(employee => employee.Department == "Software");
//Looping through your filtered results
foreach(var employee in filteredResultsTwo)
{
Console.WriteLine(employee.Name);
}
فى الكود السابق تم استخدام تركيب linq method لتصفية قائمة الموظفين الذين يعملون فى قسم السوفت وير . وتم استخدام تعبير لامدا كدالة مسندة .ثم قمنا بعمل دوران على عناصر القائمة الجديدة لطباعتها
وفيما يلى الكود الكامل
namespace Linq
{
public class Employee
{
private string _name;
private int _id;
private string _department;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Id
{
get { return _id; }
set { _id = value; }
}
public string Department
{
get { return _department; }
set { _department = value; }
}
}
internal class Program
{
//GOAL: Our goal is to filter through the list to get the employees
//that work in the software department.
public static void ListOperations()
{
List employees = new List()
{
new Employee(){ Id=1, Name="John Doe", Department="Software"},
new Employee(){ Id=2, Name="Angela Su", Department="Sales"},
new Employee(){ Id=3, Name="Frank Kelvin", Department="Marketing"},
new Employee(){ Id=4, Name="Joe Dustin", Department="Sales"},
new Employee(){ Id=5, Name="Glory GG", Department="Software"},
new Employee(){ Id=6, Name="Antonella Cruz", Department="Marketing"},
new Employee(){ Id=5, Name="Andrew Logan", Department="Software"},
new Employee(){ Id=6, Name="Billy Cruz", Department="Marketing"},
new Employee(){ Id=5, Name="Sally Jane", Department="Software"},
new Employee(){ Id=4, Name="Jon Snow", Department="Sales"},
};
//1: Iterative method
Console.WriteLine("Filtering through the Employee list using the " +
"Iterative method");
foreach (var employee in employees)
{
if(employee.Department == "Software")
{
Console.WriteLine(employee.Name);
}
}
//2: LINQ query syntax (using the Where clause)
Console.WriteLine("\nWhere clause - LINQ query syntax ");
var filteredResults = from employee in employees
where employee.Department == "Software"
select employee.Name;
foreach(var result in filteredResults)
{
Console.WriteLine(result);
}
//3: LINQ method syntax (using the Where clause)
Console.WriteLine("\nWhere clause - LINQ method syntax ");
var filteredResultsTwo = employees.Where(employee => employee.Department == "Software");
foreach(var employee in filteredResultsTwo)
{
Console.WriteLine(employee.Name);
}
}
static void Main(string[] args)
{
ListOperations();
}
}
}
الخلاصة
ان استخدام الفلترة والتصفيه فى لغة سى شارب لاستخراج العناصر التى ينطبق عليها شرط معين مهارة اساسية لكل المطورين والمبرمجين وفى هذة المقالة تم شرح كيفية تصفية قائمة فى سى شارب باستخدام اكثر من طريقة
تعليقات
إرسال تعليق