إتقان استعلامات LINQ على DataTables في C#

يتطلب العمل مع البيانات في C# غالبًا قدرات استعلام فعّالة لاسترجاع المعلومات والمعالجة بشكل سلس. إحدى الطرق الشائعة لاستعلام البيانات في .NET هي من خلال استعلامات اللغة المتكاملة (LINQ). ومع ذلك، عند التعامل مع كائن DataTable، قد تواجه بعض التحديات أثناء محاولة تنفيذ استعلامات LINQ بشكل مباشر. إذا وجدت نفسك في حيرة من ذلك، تابع القراءة حيث نقوم بتفكيك كيفية تنفيذ استعلامات LINQ على DataTable بشكل فعّال.

فهم المشكلة

على الرغم من أن LINQ مصممة للعمل مع مصادر بيانات مختلفة، إلا أن استعلام DataTable ليس بالبساطة التي تبدو عليها. على سبيل المثال، محاولة تشغيل استعلام مشابه للمثال أدناه سيؤدي إلى أخطاء:

var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;

هذا الكود لا يعمل بسبب أن DataRowCollection لا تنفذ IEnumerable<T>، وهو أمر ضروري لاستعلامات LINQ.

الحل: استخدام AsEnumerable()

لجعل LINQ يعمل مع DataTable، يجب الاستفادة من طريقة التمديد AsEnumerable() المقدمة إلى DataTable. تقوم هذه الطريقة بتحويل صفوف DataTable إلى IEnumerable<DataRow>. إليك كيفية تنفيذ استعلام LINQ بنجاح:

تنفيذ الاستعلام خطوة بخطوة

  1. استيراد مساحة الأسماء المطلوبة تأكد من أن لديك مساحة الأسماء المناسبة من خلال تضمين مرجع إلى System.Data.DataSetExtensions. هذا عادة ما يكون ضروريًا للوصول إلى وظائف LINQ باستخدام DataTable.

  2. استخدام AsEnumerable() للاستعلامات بدلاً من محاولة استعلام مجموعة Rows مباشرة، قم أولاً باستدعاء AsEnumerable() على DataTable. إليك مثال على الشيفرة:

    var results = from myRow in myDataTable.AsEnumerable()
                  where myRow.Field<int>("RowNo") == 1
                  select myRow;
    
  3. بديل باستخدام تعبير لامبدا إذا كنت تفضل استخدام تعبيرات لامبدا، فهذا ممكن أيضًا. الاستعلام المكافئ بصيغة لامبدا هو كما يلي:

    var result = myDataTable
        .AsEnumerable()
        .Where(myRow => myRow.Field<int>("RowNo") == 1);
    

تحويل النتائج إلى DataTable

إذا كنت ترغب في تحويل النتائج مرة أخرى إلى DataTable، يمكنك استخدام طريقة التمديد CopyToDataTable():

DataTable filteredTable = result.CopyToDataTable();

الخاتمة

قد يكون تنفيذ استعلام LINQ على DataTable في C# ازدواجياً بعض الشيء في البداية، ولكن مع النهج الصحيح باستخدام طريقة AsEnumerable()، يمكنك معالجة بياناتك بكفاءة. سواء كنت تستخدم صيغة الاستعلام أو تعبيرات لامبدا، فإن LINQ هي أداة قوية يمكن أن تعزز تجربة إدارة البيانات الخاصة بك.

من خلال فهم هذه الطرق، يمكنك ضمان سير عمل سلس أثناء التعامل مع جداول البيانات في تطبيقاتك. لمزيد من التعلم، استكشف مختلف طرق وممارسات LINQ لاستغلال الإمكانيات الكاملة لـ C#.