تعبيرات LINQ الديناميكية وتعبيرات Lambda الديناميكية؟

StackOverflow https://stackoverflow.com/questions/114029

  •  02-07-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لكتابة استعلامات LINQ وتعبيرات Lambda ديناميكيًا؟

أفكر في التطبيقات التي يمكن للمستخدم النهائي من خلالها تصميم قواعد منطق الأعمال، والتي يجب تنفيذها بعد ذلك.

أنا آسف إذا كان هذا سؤال مبتدئ، ولكن سيكون من الرائع الحصول على أفضل الممارسات من الخبرة.

هل كانت مفيدة؟

المحلول

لا أستطيع أن أوصي بقراءة أعلى من منشورات Bart De Smet (http://community.bartdesmet.net/blogs/bart/)، فهو رائع حقًا عندما يتعلق الأمر بـ Lambda.

غطت سلسلته الأخيرة Lambda الديناميكية، بدءًا من http://community.bartdesmet.net/blogs/bart/archive/2008/08/26/to-bind-or-not-to-bind-dynamic-expression-trees-part-0.aspx

كود جميل على الاطلاق.

نصائح أخرى

هناك احتمال آخر وهو دمج وقت تشغيل البرمجة النصية في برنامجك، بحيث يمكن للمستخدمين كتابة منطق الأعمال في DSL. أيرون بايثون سيكون مرشحا.

أستطيع أن أرى طريقتين يمكنك من خلالهما إنشاء لامدا ديناميكيًا.يمكنك تجربة Reflection.Emit لإنشاء IL (رمز .Net bytecode) مباشرة واستدعائهم كـ lambda أو يمكنك استخدام System.CodeDom وMicrosoft.CSharp.CSharpCodeProvider لإنشاء التعليمات البرمجية من بنيات ذات مستوى أعلى.يعتمد ما تريد القيام به على الطريقة التي تريد أن يقوم المستخدم بإدخال هذه الأشياء بها.إذا كنت تريد من المستخدم أن يكتب C#، فيمكنك فقط استخدام المترجم المدمج.

يجب أن يكون إنشاء Linq ديناميكيًا أسهل.يجب أن تكون قادرًا على إنشاء استعلامات LINQ كأشجار تعبير في وقت التشغيل ثم تمريرها إلى IQueryable للتنفيذ.أقترح عليك الاطلاع على الوثائق الموجودة على IQueryable لمعرفة المزيد حول هذا الأمر.هناك طريقة أخرى تتمثل في التحديد المسبق لاستعلامات linq ثم السماح للمستخدم بربطها معًا.يجب أن يكون هذا قابلاً للتطبيق لأن أي استعلام Linq يُرجع IEnumerable الذي يمكن استهلاكه بواسطة استعلام Linq التالي.

يمكن إنشاء تعبيرات Lambda بسهولة عبر مساحة الاسم System.Linq.Expressions.

System.Linq.Expressions هو ما تحتاجه.لقد قمت بكتابة واجهة مستخدم رائعة تتيح للمستخدمين تحديد وبناء الاستعلامات ديناميكيًا في شكل شجرة تعبير.يمكنك بعد ذلك تسليم هذا إلى Linq2SQL أو العميل الذي تختاره.

لا أفهم ماذا تقصد بقول "أفضل طريقة".سيكون من الأفضل تقديم مثال بسيط لما تريد تحقيقه.إن إنشاء تعبير LINQ الديناميكي ليس بالأمر الصعب ولكنه صعب.

فيما يلي مثال لإنشاء تعبير linq الديناميكي:

كيف أقوم بتكوين تعبيرات Linq الموجودة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top