Avatar ·

الفرز الديناميكي في 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(); } ```