الفرز الديناميكي في LINQ: كيفية تطبيق OrderBy على IEnumerable/IQueryable باستخدام اسم الخاصية من سلسلة نصية؟
مرحباً بالجميع! أنا مبتدئ في C# وLINQ، وقد واجهت مهمة تحيرني.
لدي مجموعة من الكائنات `IEnumerable` (أو `IQueryable`) وأريد فرزها حسب حقول مختلفة بناءً على اختيار المستخدم. يمرر المستخدم اسم الحقل (مثلاً "Name" أو "Date") واتجاه الفرز ("asc" أو "desc") كسلاسل نصية. كيف يمكنني تطبيق `OrderBy` أو `OrderByDescending` ديناميكياً على المجموعة باستخدام هذه السلاسل؟
المشكلة أن `OrderBy` هي دالة عامة (generic) تتطلب تحديد الخاصية في وقت الترجمة عبر تعبير لامدا (مثل `list.OrderBy(x => x.Name)`). لا يمكنني ببساطة كتابة `list.OrderBy("Name")`.
إليك مثال على كود لا يعمل:
```csharp
public List SortPeople(IEnumerable people, string sortBy, bool ascending)
{
if (sortBy == "Name")
{
return ascending ? people.OrderBy(p => p.Name).ToList()
: people.OrderByDescending(p => p.Name).ToList();
}
```