المشاركات

عرض المشاركات من مارس, 2025

3.3 SQL UPDATE

جملة SQL UPDATE جملة UPDATE في SQL تُستخدم لتعديل السجلات (records) الموجودة في جدول (table). صيغة جملة UPDATE UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ملاحظة: من المهم جدًا استخدام جملة WHERE لتحديد السجلات التي تريد تحديثها. بدون WHERE ، سيتم تحديث كل السجلات في الجدول. مثال على قاعدة بيانات Demo في أمثلتنا، سنستخدم جدول يُدعى Customers : CustomerID CustomerName ContactName Address City PostalCode Country مثال على SQL UPDATE السطر التالي يقوم بتحديث حقل ContactName و City للعميل الذي يمتلك CustomerID = 1 : UPDATE Customers SET ContactName = 'Alfred Schmidt', City = 'Frankfurt' WHERE CustomerID = 1; تحديث جميع السجلات إذا لم تكتب شرط WHERE ، سيتم تحديث جميع الصفوف في الجدول: UPDATE Customers SET ContactName = 'Juan'; تحذير: كن حذرًا جدًا عند استخدام جملة UPDATE بدون WHERE !

2.12 SQL NULL Values

SQL NULL Values ما هي القيمة NULL في SQL؟ في SQL، NULL تعني أن الحقل لا يحتوي على قيمة. القيمة NULL تختلف عن القيمة 0 أو سلسلة فارغة '' ، بل تعني لا توجد قيمة . كيف يتم التعامل مع NULL؟ عند إدراج سجل في جدول بدون توفير قيمة لأحد الأعمدة، يتم تعيين القيمة تلقائيًا إلى NULL (إذا كان العمود يسمح بـ NULL). اختبار القيم NULL لا يمكن استخدام المعامل = أو != لاختبار القيم NULL . بدلًا من ذلك، يجب استخدام: IS NULL لاختبار ما إذا كانت القيمة NULL IS NOT NULL لاختبار ما إذا كانت القيمة ليست NULL مثال على IS NULL SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NULL; الشرح: يعرض العملاء الذين لا يوجد لديهم عنوان. مثال على IS NOT NULL SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NOT NULL; الشرح: يعرض العملاء الذين لديهم عنوان (أي القيمة ليست NULL).

3.1 SQL INSERT INTO

SQL INSERT INTO تُستخدم عبارة INSERT INTO لإضافة سجل جديد (new record) داخل جدول (table) في قاعدة البيانات. الصيغة الأولى: تحديد أسماء الأعمدة والقيم يتم فيها تحديد الأعمدة التي تريد إدخال بيانات فيها، والقيم المقابلة لها: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); الصيغة الثانية: إدخال القيم فقط تُستخدم عندما تريد إدخال قيم لجميع الأعمدة وبالترتيب الموجود في الجدول: INSERT INTO table_name VALUES (value1, value2, value3, ...); 📌 ملاحظة: من الأفضل دائمًا تحديد أسماء الأعمدة لتجنب الأخطاء إذا تغير ترتيب الأعمدة لاحقًا. مثال على جدول افترض أن لدينا جدولًا باسم Customers يحتوي على الأعمدة التالية: CustomerName ContactName Address City PostalCode Country مثال عملي على INSERT INTO الاستعلام التالي يقوم بإدخال سجل جديد في جدول Customers : INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) VALUES ('Cardinal', 'Tom B. Erichsen', 'Sk...

2.7 SQL NOT

SQL NOT تُستخدم عبارة NOT في جملة WHERE لنفي (عكس) الشرط. أي إنها تُرجع السجلات التي لا تحقق الشرط المحدد. جملة SQL NOT NOT تُستخدم لتصفية السجلات التي لا تحقق الشرط. الصيغة العامة SELECT column1, column2, ... FROM table_name WHERE NOT condition; مثال على جدول افترض أن لدينا جدولًا باسم Customers يحتوي على الأعمدة التالية: CustomerID CustomerName Country مثال على استخدام NOT الاستعلام التالي يعرض جميع العملاء الذين ليسوا من البلد Germany : SELECT * FROM Customers WHERE NOT Country = 'Germany'; استخدام NOT مع AND / OR يمكنك دمج NOT مع AND أو OR وكذلك مع الأقواس للتحكم في منطق الاستعلام. مثال: SELECT * FROM Customers WHERE Country = 'Germany' AND NOT CustomerName = 'Alfreds Futterkiste'; هذا الاستعلام يعرض جميع العملاء من Germany ، ما عدا من اسمه Alfreds Futterkiste .

2.6 SQL OR

SQL OR تُستخدم عبارة OR في جملة WHERE لتصفية السجلات التي تحقق أي شرط من الشروط المحددة (أي شرط واحد على الأقل). جملة SQL OR تُستخدم OR عندما نريد تحديد أكثر من شرط، ويتم عرض السجل (record) إذا تحقق شرط واحد على الأقل . الصيغة العامة SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 ...; مثال على جدول افترض أن لدينا جدولًا باسم Customers يحتوي على الأعمدة التالية: CustomerID CustomerName ContactName Country مثال على استخدام OR الاستعلام التالي يعرض العملاء الذين يكون بلدهم Germany أو تكون City الخاصة بهم Berlin : SELECT * FROM Customers WHERE Country = 'Germany' OR City = 'Berlin'; إذا تحقق أحد الشرطين أو كلاهما، فسيتم تضمين السجل في النتائج. الجمع بين OR و AND عند الجمع بين AND و OR في نفس الجملة، استخدم الأقواس ( ) لتحديد ترتيب التنفيذ (الأولوية). مثال: SELECT * FROM Customers WHERE Country = 'Germany' AND (City = 'Berlin' OR City = 'München')...

2.5 SQL AND and OR

SQL AND و OR تُستخدم AND و OR لتصفية السجلات بناءً على أكثر من شرط (condition): AND تُستخدم لعرض السجلات التي تتحقق فيها كل الشروط . OR تُستخدم لعرض السجلات التي تتحقق فيها على الأقل أحد الشروط . جملة SQL AND تُستخدم AND لتصفية السجلات بحيث يتم عرض الصفوف التي تستوفي جميع الشروط. الصيغة العامة SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...; مثال على AND الاستعلام التالي يعرض العملاء (customers) من البلد Germany واسم جهة الاتصال (ContactName) هو Maria Anders : SELECT * FROM Customers WHERE Country = 'Germany' AND ContactName = 'Maria Anders'; جملة SQL OR تُستخدم OR لتصفية السجلات بحيث يتم عرض الصفوف التي تستوفي أحد الشروط على الأقل. الصيغة العامة SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 ...; مثال على OR الاستعلام التالي يعرض العملاء الذين يكون بلدهم Germany أو اسم جهة الاتصال Maria Anders : SELECT * FROM Customers WHERE ...

2.3 SQL ORDER BY

SQL ORDER BY تُستخدم عبارة ORDER BY لترتيب نتائج الاستعلام (result-set) حسب عمود واحد أو أكثر. جملة SQL ORDER BY بشكل افتراضي، يتم ترتيب النتائج تصاعديًا (ascending order). لاستخدام الترتيب التنازلي (descending order)، نستخدم الكلمة المفتاحية DESC . الصيغة العامة SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC; مثال على جدول افترض أن لدينا جدولًا باسم Customers يحتوي على الأعمدة التالية: CustomerID CustomerName Country مثال على ORDER BY تصاعديًا (ASC) الاستعلام التالي يختار كل العملاء، ويرتبهم حسب CustomerName تصاعديًا (من A إلى Z): SELECT * FROM Customers ORDER BY CustomerName; أو يمكنك كتابة: SELECT * FROM Customers ORDER BY CustomerName ASC; مثال على ORDER BY تنازليًا (DESC) الاستعلام التالي يرتب العملاء حسب CustomerName تنازليًا (من Z إلى A): SELECT * FROM Customers ORDER BY CustomerName DESC; ترتيب حسب أكثر من عمود الاستعلام التالي يرتب النتائج أولًا حسب Country تصاعديًا، ثم حسب Custom...

2.2 SQL WHERE

SQL WHERE تُستخدم عبارة WHERE لتصفية السجلات (records)، وتُستخدم لاستخراج السجلات التي تحقق شرطًا محددًا. جملة SQL WHERE تُستخدم WHERE في جملة SELECT لتحديد شرط (condition) لاستخراج السجلات المطابقة فقط. الصيغة العامة: SELECT column1, column2, ... FROM table_name WHERE condition; مثال على قاعدة بيانات افترض أن لدينا الجدول التالي المسمى Customers : CustomerID CustomerName ContactName Country 1 Alfreds Futterkiste Maria Anders Germany 2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico 3 Antonio Moreno Taquería Antonio Moreno Mexico 4 Around the Horn Thomas Hardy UK 5 Berglunds snabbköp Christina Berglund Sweden مثال على استخدام WHERE العبارة التالية تختار جميع العملاء (customers) من البلد (Country) "Mexico": SELECT * FROM Customers WHERE Country = 'Mexico'; العوامل (Operators) المستخدمة مع WHERE يمكنك استخدام عوامل مختلفة في عبارة WHERE ، منها: العامل (Operator) الوصف (Description) = يساوي ...

2.4 SQL DISTINCT

SQL DISTINCT عبارة SELECT DISTINCT تُستخدم لإرجاع قيم (values) مختلفة فقط. جملة SQL SELECT DISTINCT في جدول، قد تحتوي العمود (column) على العديد من القيم المكررة (duplicate values)، وأحيانًا نرغب فقط في سرد القيم المختلفة (distinct values). تُستخدم SELECT DISTINCT لإرجاع القيم المختلفة فقط. الصيغة العامة: SELECT DISTINCT column1, column2, ... FROM table_name; مثال على قاعدة بيانات افترض أن لدينا الجدول التالي المسمى Customers : CustomerID CustomerName Country 1 Alfreds Futterkiste Germany 2 Ana Trujillo Emparedados y helados Mexico 3 Antonio Moreno Taquería Mexico 4 Around the Horn UK 5 Berglunds snabbköp Sweden SELECT DISTINCT مثال العبارة التالية تُستخدم لتحديد (select) القيم المختلفة في عمود Country من جدول Customers : SELECT DISTINCT Country FROM Customers; النتيجة ستكون قائمة بالبلدان (countries) الفريدة التي تحتوي على عملاء (customers). ملاحظات: يمكنك استخدام DISTINCT مع عمود واحد أو أكثر. عند استخدام DISTINCT مع أعمدة ...

2.1 SQL SELECT Statement

SQL SELECT Statement – جملة SELECT في SQL The SELECT Statement – جملة SELECT تُستخدم جملة SELECT لاستخراج البيانات ( retrieve data ) من قاعدة بيانات. البيانات المستخرجة تُخزن في جدول يُسمى result-set (مجموعة النتائج). SQL SELECT Syntax – الصيغة العامة لـ SELECT في SQL SELECT column1, column2, ... FROM table_name; column1, column2, ... – أسماء الأعمدة اللي عايز تسترجع بياناتها table_name – اسم الجدول اللي البيانات هتيجي منه Example – مثال الجدول التالي اسمه Customers : CustomerID CustomerName ContactName Country 1 Alfreds Futterkiste Maria Anders Germany 2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico ... ... ... ... الجملة التالية: SELECT CustomerName, City FROM Customers; هتجيب عمودين فقط من الجدول: CustomerName City **SELECT * Example – مثال على SELECT *** تُستخدم **SELECT *** لاختيار جميع الأعمدة من الجدول. مثال: SELECT * FROM Customers; هيجلب كل الأعمدة من جدول Customers . ملاحظات إضافية: من الأفضل تحد...

1.2 SQL Syntax

SQL Syntax – صيغة أو تركيب SQL SQL Statement – جملة SQL أغلب المهام في قواعد البيانات تُنفذ باستخدام SQL statements (جُمل SQL)، مثل: SELECT * FROM Customers; الجملة دي بتُستخدم لاختيار جميع الحقول ( all columns ) من جدول اسمه Customers . Semicolon after SQL Statements – الفاصلة المنقوطة بعد جُمل SQL بعض أنظمة قواعد البيانات تطلب إنك تنهي كل SQL statement بـ semicolon (;) – يعني فاصلة منقوطة. الفاصلة المنقوطة بتُستخدم عشان تفصل بين جُمل SQL متعددة لما تنفذ أكثر من جُملة في نفس الاستعلام. Some of The Most Important SQL Commands – بعض أوامر SQL الأكثر أهمية SELECT – تُستخدم لاختيار بيانات من قاعدة البيانات UPDATE – تُستخدم لتحديث بيانات موجودة بالفعل في قاعدة البيانات DELETE – تُستخدم لحذف بيانات من قاعدة البيانات INSERT INTO – تُستخدم لإدخال بيانات جديدة في قاعدة البيانات CREATE DATABASE – تُستخدم لإنشاء قاعدة بيانات جديدة ALTER DATABASE – تُستخدم لتعديل قاعدة بيانات موجودة CREATE TABLE – تُستخدم لإنشاء جدول جديد ALTER TABLE – تُستخدم لتعديل...

1.1 SQL Introduction

SQL Introduction – مقدمة في SQL  ما هي SQL؟ SQL هي اختصار لـ Structured Query Language (لغة الاستعلام البنيوية). SQL تُستخدم للوصول إلى قواعد البيانات والتحكم فيها ( access and manipulate databases ). SQL تعتبر معيارًا معتمدًا من ANSI (المعهد القومي الأمريكي للمعايير).  ماذا يمكن أن تفعل SQL؟ SQL يمكنها تنفيذ الاستعلامات على قاعدة البيانات ( execute queries against a database ). SQL يمكنها استرجاع البيانات من قاعدة البيانات ( retrieve data from a database ). SQL يمكنها إدخال سجلات في قاعدة البيانات ( insert records in a database ). SQL يمكنها تحديث السجلات في قاعدة البيانات ( update records in a database ). SQL يمكنها حذف السجلات من قاعدة البيانات ( delete records from a database ). SQL يمكنها إنشاء قواعد بيانات جديدة ( create new databases ). SQL يمكنها إنشاء جداول جديدة داخل قاعدة البيانات ( create new tables in a database ). SQL يمكنها إنشاء إجراءات مخزنة ( stored procedures ) داخل قاعدة البيانات. SQL يمكنها إنشاء عروض...

End-to-End Encryption

تمام، خليني أقولها لك بأسلوب مختلف تمامًا... خلينا نتخيل مع بعض: تخيل إنك بتبعت جواب سري لصاحبك في الزمن القديم، لو حبيت تبعت جواب سري، كنت ممكن تقفله بشمع أحمر ومفتاح محدش يملكه غير صاحبك. لو حد حاول يفتحه، هيتفضح. نفس الفكرة بالضبط، لكن بدل الجواب الورقي... إحنا بنتكلم عن رسائل بتتبعت على الإنترنت! طيب... يعني إيه "End-to-End Encryption"؟ هو ببساطة: قفل رقمي محكم بتحطّه على الرسالة، ومفيش مفتاح يفتح القفل ده غير اللي الرسالة رايحة له… مش السيرفر، مش الشركة، مش الهاكر، ولا حتى الحكومة. --- الموضوع ماشي إزاي؟ 1. كل واحد معاه قفله ومفتاحه لما تبدأ محادثة مع أي حد، التطبيق بيجهزلكم زوج مفاتيح: مفتاح عام: زي عنوان البريد. مفتاح خاص: زي المفتاح اللي بيفتح الشنطة. 2. تبادل العناوين (المفاتيح العامة) كل واحد يبعت العنوان بتاعه (المفتاح العام) للتاني. مش مشكلة لو حد شافه، لأن المفتاح ده بيشفر بس… ميقدرش يفتح حاجة. 3. الرسالة بتتكتب وتتقفل أول ما تكتب رسالة، التطبيق يستخدم مفتاح صاحبك العام علشان يقفل الرسالة بقفل رقمي قوي جدًا. 4. الاستلام والفتح صاحبك، اللي ...

Javascript: Session Storage

 Session Storage   Session Storage هو أحد أنواع التخزين المحلي (Web Storage) في المتصفح، يُستخدم لتخزين البيانات مؤقتًا أثناء جلسة المستخدم (session). يعني كده ببساطة: ✅ التعريف السريع : Session Storage هو مساحة تخزين مؤقتة داخل المتصفح، تحتفظ بالبيانات طالما المستخدم فاتح التبويب (tab) أو النافذة (window). أول ما يقفل التبويب أو يعمل Reload، البيانات بتروح. 📌 الفرق بين Session Storage و Local Storage : الجانب Session Storage Local Storage مدة التخزين تنتهي عند غلق التبويب تبقى محفوظة حتى تحذف يدويًا حجم البيانات حوالي 5MB حوالي 5-10MB الوصول من التبويبات لا يمكن ممكن مشاركة البيانات غير مشترك بين التبويبات مشترك بين التبويبات 🧪 مثال عملي : // تخزين بيانات sessionStorage.setItem("username", "Mahmoud"); // جلب بيانات let user = sessionStorage.getItem("username"); console.log(user); // Mahmoud // حذف عنصر sessionStorage.removeItem("username"); // حذف كل حاجة sessionStorage.clear(); ⚠️ متى تستخدمه؟ لما تحب...

Javascript: Local Storage

ما هو LocalStorage؟ LocalStorage هو مكان في المتصفح تقدر تخزن فيه بيانات بشكل دائم (حتى لو قفلت المتصفح وأعدت تشغيل الجهاز). ✅ أهم مميزاته: بيحتفظ بالبيانات حتى بعد إعادة تشغيل المتصفح. سهل الاستخدام. بيخزن البيانات على شكل "مفتاح وقيمة" (key-value). السعة حوالي 5MB. 📦 مثال عملي: لو عايز تخزن اسم المستخدم: localStorage.setItem("username", "Mahmoud"); لو عايز تجيب البيانات: let name = localStorage.getItem("username"); console.log(name); // يطبع: Mahmoud لو عايز تمسح حاجة محددة: localStorage.removeItem("username"); ولو عايز تمسح كل البيانات: localStorage.clear(); 🧠 متى أستخدمه؟ لما تحب تحفظ بيانات مش مهمة أوي بس بتسهّل على المستخدم ، زي: تفضيلات المستخدم (زي الوضع الليلي) اسم المستخدم عشان ترحب بيه إعدادات واجهة المستخدم ⚠️ تنبيه: البيانات في localStorage مكشوفة ، يعني مش آمنة لتخزين كلمات المرور أو معلومات حساسة. ما ينفعش تخزن فيه كائنات (Objects) مباشرة، لازم تحوّلهم لـ JSON. ...

Javascript: Events - الأحداث

Events - الأحداث لأن بعد ما تعرف تتعامل مع عناصر الصفحة (عبر DOM)، لازم تعرف إزاي تخلي الصفحة تتفاعل مع المستخدم ، زي: لما المستخدم يضغط على زر (Click) أو يكتب في خانة (Input) أو يحرك الماوس (Mousemove) أو يضغط زرار من الكيبورد (Keypress) أمثلة بسيطة على الأحداث: document.querySelector("button").addEventListener("click", function() { alert("تم الضغط على الزر!"); }); ده معناه: لما المستخدم يضغط على الزر، نفذ الكود اللي جواه. بعد ما تفهم الأحداث كويس، ممكن تتعلم بعدها: ✅ DOM Manipulation المتقدم (إضافة عناصر – حذف – تغيير خصائص) ✅ Forms & Validation – التعامل مع النماذج والتحقق من المدخلات. ✅ AJAX & Fetch API – جلب بيانات من السيرفر بدون إعادة تحميل الصفحة. ✅ LocalStorage & SessionStorage – تخزين بيانات على المتصفح. ✅ ثم تبدأ تدخل على مكتبات زي jQuery (اختياري)، أو تبدأ تتعلم React .

Javascript: ما هو DOM؟

ما هو DOM؟  DOM هو اختصار لـ Document Object Model ، ويُترجم إلى نموذج كائن المستند . ببساطة كده، الـ DOM هو الطريقة اللي المتصفح بيشوف بيها صفحة الويب (HTML). لما تكتب كود HTML، المتصفح بيحوّله إلى شجرة من العناصر (Nodes) وبيتعامل مع كل جزء في الصفحة ككائن (Object) تقدر توصله وتتحكم فيه باستخدام JavaScript. مثال بسيط: لو عندك الكود ده: <html> <body> <h1>أهلاً يا محمود!</h1> <p>ده مثال بسيط.</p> </body> </html> المتصفح هيحوّله داخليًا لشجرة DOM بالشكل ده: Document └── html └── body ├── h1 └── p باستخدام JavaScript: تقدر تغير محتوى أو شكل العناصر دي، مثلاً: document.querySelector("h1").textContent = "مرحبًا بك!"; ده بيغير النص اللي جوه <h1> في الصفحة باستخدام DOM. ملخص سريع: DOM هو تمثيل هيكلي لصفحة الويب. بيسمحلك تتعامل مع عناصر الصفحة باستخدام JavaScript (تغيّر، تضيف، تمسح). هو الأساس اللي بيمكّنك من إنشاء صفحات تفاعلية وديناميكية.

ما هو Vibe Coding?

صورة
ما هو "Vibe Coding"؟ هو أسلوب جديد للبرمجة يركز على وصف المطلوب بلغتك العادية بدل ما تكتب الكود بنفسك. ببساطة، أنت تقول للذكاء الاصطناعي (AI) اللي عايز تعمله، وهو يتولى كتابة الكود المناسب. مثلاً: بدل ما تكتب كود SQL معقد، تقول: "عايز تقرير بالمبيعات الشهرية لكل منطقة وعميل، مترتب تنازليًا حسب القيمة". الذكاء الاصطناعي يحوّل الوصف ده إلى كود جاهز للتشغيل. كيف يعمل Vibe Coding؟ تكتب المطلوب بلغة طبيعية الذكاء الاصطناعي يكتب الكود تلقائيًا تطلب تعديلات بلغتك تراجع وتشغل الكود مميزاته: يسهّل البرمجة لغير المبرمجين يزيد سرعة الإنتاج البرمجي بشكل كبير يغيّر دور المبرمج من كتابة الكود إلى تصميم الحلول ومراجعتها التحديات والمخاطر: كود غير قابل للصيانة : قد يكون معقدًا أو غير منظم. صعوبة في التصحيح (Debugging) : AI ليس جيدًا في فهم الأخطاء المعقدة. مخاوف أمنية : الكود قد يحتوي على ثغرات غير مقصودة. أسئلة قانونية : من يمتلك الكود الذي ينتجه الذكاء الاصطناعي؟ هل سينتهي كتريند؟ الـ Vibe Coding مش مجرد موضة، لكنه تطور طبيعي في مسار البرمجة ،...

Differences Between LINQ JOIN and GROUP JOIN Methods

Differences Between LINQ JOIN and GROUP JOIN Methods في LINQ، تُستخدم دالتي Join و GroupJoin لربط مجموعتين من البيانات بناءً على مفتاح مشترك، لكنهما تختلفان في كيفية التعامل مع النتائج وطريقة العرض. دالة Join: الغرض: تنفيذ عملية Inner Join بين مجموعتين، حيث تُعاد فقط العناصر التي تتطابق مفاتيحها في كلا المجموعتين. النتيجة: تُعيد مجموعة مسطحة (flat) من العناصر المتطابقة. مثال على استخدام Join: var result = from c in categories join p in products on c.CategoryId equals p.CategoryId select new { c.CategoryName, p.ProductName }; في هذا المثال، يتم ربط المجموعتين categories و products على أساس CategoryId ، وتُعاد فقط الأزواج التي يوجد لها تطابق في كلا المجموعتين. دالة GroupJoin: الغرض: تنفيذ عملية Group Join ، حيث تُعاد كل العناصر من المجموعة الخارجية مع مجموعة من العناصر المتطابقة من المجموعة الداخلية. النتيجة: تُعيد مجموعة هرمية (hierarchical) حيث يكون لكل عنصر من المجموعة الخارجية مجموعة من العناصر المتطابقة م...

الفرق بين Cast و OfType في LINQ

الفرق بين Cast و OfType في LINQ في LINQ، كل من Cast<T>() و OfType<T>() تُستخدم لتحويل تسلسل من عناصر إلى نوع معين. لكن كل واحدة منهما تعمل بطريقة مختلفة، ودي أهم الفروقات بينهم. 1. Cast() الاستخدام: تُستخدم لتحويل كل عنصر في تسلسل IEnumerable إلى نوع معين T . السلوك: إذا كان أي عنصر لا يمكن تحويله إلى T → يتم رمي استثناء InvalidCastException . يُفترض أن كل العناصر قابلة للتحويل إلى T . مثال: ArrayList list = new ArrayList() { 1, 2, 3, "four", 5 }; var result = list.Cast<int>(); foreach (var item in result) { Console.WriteLine(item); } النتيجة: 1 2 3 (ثم استثناء) الخطأ: System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Int32'. 2. OfType() الاستخدام: تُستخدم لتصفية العناصر من تسلسل IEnumerable بحيث تُرجع فقط العناصر التي يمكن تحويلها إلى النوع T . السلوك: تتجاهل بصمت العناصر التي لا تتطابق مع النوع T . لا يتم رمي استثناءات. ...

Cast() وOfType

Differences Between Cast<T>() and OfType<T>() in LINQ في LINQ، تُستخدم الدالتان Cast<T>() و OfType<T>() لتحويل أو تصفية عناصر مجموعة غير عامة ( IEnumerable ) إلى نوع محدد ( T ). ومع ذلك، هناك اختلافات جوهرية في كيفية تعامل كل منهما مع العناصر التي لا يمكن تحويلها إلى النوع المستهدف. دالة Cast<T>(): الغرض: تحاول تحويل كل عنصر في المجموعة إلى النوع المحدد ( T ). السلوك: إذا واجهت عنصرًا لا يمكن تحويله إلى النوع T ، فإنها ترمي استثناءً من نوع InvalidCastException . الاستخدام المناسب: عند التأكد من أن جميع العناصر في المجموعة هي من النوع T أو يمكن تحويلها إليه، وتريد أن يتم إعلامك بأي خطأ في التحويل عبر استثناء. مثال على Cast<T>(): using System; using System.Collections; using System.Collections.Generic; using System.Linq; class Program { static void Main() { ArrayList list = new ArrayList { 10, 20, 30, "50" }; try { IEnumerable<int> result = list.Cast...

Cast() في LINQ

شرح دالة Cast<T>() في LINQ دالة Cast<T>() في LINQ تُستخدم لتحويل عناصر مجموعة غير عامة ( non-generic collection ) إلى نوع محدد ( T )، مما يتيح لك استخدام عمليات LINQ القياسية على هذه المجموعة. تُنفذ هذه الدالة باستخدام التنفيذ المؤجل (deferred execution)، أي أن عملية التحويل لا تتم إلا عند اجتياز العناصر فعليًا (مثلًا باستخدام foreach ). مثال على استخدام Cast<T>(): using System; using System.Collections; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // إنشاء ArrayList تحتوي على عناصر من أنواع مختلفة ArrayList list = new ArrayList { 1, 2, "three", 4 }; try { // محاولة تحويل جميع العناصر إلى نوع int باستخدام Cast<int>() IEnumerable<int> result = list.Cast<int>(); foreach (int number in result) { Console.WriteLine(number); } } catch (InvalidC...

ToDictionary() في LINQ

شرح دالة ToDictionary() في LINQ دالة ToDictionary() في LINQ تُستخدم لتحويل تسلسل من العناصر إلى قاموس ( Dictionary<TKey, TValue> )، حيث يتم تحديد المفتاح والقيمة لكل عنصر باستخدام دوال اختيارية. هذه الدالة مفيدة جدًا لإنشاء قاموس من بيانات قائمة، يكون فيه لكل مفتاح قيمة مرتبطة به. الصيغة العامة: Dictionary<TKey, TValue> dictionary = source.ToDictionary(keySelector); source : التسلسل الأصلي من النوع IEnumerable<TSource> . keySelector : دالة تُحدد المفتاح لكل عنصر. يمكن أيضًا تحديد دالة لاختيار القيمة لكل عنصر: Dictionary<TKey, TValue> dictionary = source.ToDictionary(keySelector, elementSelector); elementSelector : دالة تُحدد القيمة المقابلة لكل عنصر. مثال عملي: using System; using System.Collections.Generic; using System.Linq; public class Product { public int ID { get; set; } public string Name { get; set; } public double Price { get; set; } } public class Program { public static void Main() {...

LINQ ToList() و ToArray()

شرح ToList() و ToArray() في LINQ في هذا الدرس، سنتعرف على كيفية استخدام دالتي ToList() و ToArray() في LINQ لتحويل نتائج الاستعلام إلى قائمة ( List<T> ) أو مصفوفة ( T[] ). كلا الدالتين تُستخدمان لتنفيذ التنفيذ الفوري (Immediate Execution) ، مما يعني أن الاستعلام يتم تنفيذه في اللحظة التي تُستدعى فيها إحدى الدالتين وتُخزّن النتيجة في الذاكرة. الصيغة العامة: List<T> listResult = query.ToList(); T[] arrayResult = query.ToArray(); مثال عملي باستخدام ToList(): List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var evenNumbers = numbers .Where(n => n % 2 == 0) .ToList(); foreach (var num in evenNumbers) { Console.WriteLine(num); } الناتج: 2 4 مثال عملي باستخدام ToArray(): int[] array = numbers .Where(n => n > 3) .ToArray(); foreach (var num in array) { Console.WriteLine(num); } الناتج: 4 5 الفرق بين ToList() و ToArray(): المقارنة ToList() ToArray() نوع النتيجة List<T> ...

Linq Zip Method in C#

شرح دالة Zip() في LINQ دالة Zip() في LINQ تُستخدم لدمج عنصرين من تسلسلين مختلفين في عنصر واحد، وذلك بدمج العناصر التي لها نفس الفهرس في كل تسلسل. إذا اختلف الطول بين التسلسلين، فإن النتيجة ستكون بطول أقصر تسلسل. الصيغة العامة: IEnumerable<TResult> result = firstSequence.Zip(secondSequence, (first, second) => { // دمج العناصر هنا }); firstSequence : التسلسل الأول من النوع IEnumerable<TFirst> . secondSequence : التسلسل الثاني من النوع IEnumerable<TSecond> . resultSelector : دالة تحدد كيفية دمج العناصر. مثال عملي: int[] numbers = { 1, 2, 3, 4 }; string[] words = { "one", "two", "three" }; var numbersAndWords = numbers.Zip(words, (number, word) => number + " " + word); foreach (var item in numbersAndWords) { Console.WriteLine(item); } الناتج: 1 one 2 two 3 three في هذا المثال، تم دمج عناصر numbers مع words بنفس ترتيب الفهرس. ولأن words بها 3 عناصر فقط، فإن الناتج يحتوي ع...

LINQ Prepend Method في C#

شرح دالة Prepend() في LINQ في هذا الدرس، سنتعلّم طريقة استخدام دالة Prepend() في LINQ، والتي تُستخدم لإضافة عنصر إلى بداية التسلسل دون التأثير على التسلسل الأصلي. تم تقديمها بدءًا من .NET Core 3.0 وتتوفر أيضًا في .NET 5 وما بعده. الصيغة العامة: IEnumerable<T> result = source.Prepend(element); source : التسلسل الأصلي من النوع IEnumerable<T> . element : العنصر الذي تريد إضافته في البداية. result : تسلسل جديد يحتوي على element أولاً، ثم باقي العناصر. مثال عملي: List<string> names = new List<string> { "Sara", "Alaa", "Noor" }; var updatedNames = names.Prepend("Mahmoud"); foreach (var name in updatedNames) { Console.WriteLine(name); } الناتج: Mahmoud Sara Alaa Noor ملاحظات هامة: Prepend() لا تُعدّل المصدر الأصلي بل تُعيد تسلسل جديد. لتحويل الناتج إلى List يمكن استخدام ToList() : var newList = names.Prepend("Mahmoud").ToList(); الفرق بين Prepe...

Append() في LINQ

شرح دالة Append() في LINQ دالة Append() في LINQ تُستخدم لإضافة عنصر واحد إلى نهاية تسلسل من النوع IEnumerable<T> دون تعديل المصدر الأصلي. تم تقديمها في .NET Core 3.0 وتتوفر في .NET 5 والإصدارات الأحدث. الصيغة العامة: IEnumerable<TSource> updatedSequence = originalSequence.Append(newElement); originalSequence : التسلسل الأصلي من النوع IEnumerable<TSource> . newElement : العنصر المراد إضافته في نهاية التسلسل. مثال عملي: using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // قائمة من الأعداد الصحيحة List<int> numbers = new List<int> { 1, 2, 3, 4 }; // إضافة الرقم 5 إلى نهاية القائمة باستخدام Append() var updatedNumbers = numbers.Append(5); Console.WriteLine("القائمة الأصلية:"); foreach (var num in numbers) { Console.Write($"{num} "); } Console.WriteLine(...