سؤال

هل من الممكن تحويل استعلام SQL بطريقة أو بأخرى إلى شجرة التعبير Linq؟ من المفترض أن يتم إنشاء استعلام SQL بواسطة هذا الاستعلام LinQ هذا، لذا أفكر في ذلك كمساعدات رجالية فقيرة deserialization من استفسارات LINQ بتنسيق T-SQL.

شكرا لك.

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

المحلول

كل شيء ممكن، إنه يتطلب مجرد حمولة من العمل. المشكلة هي أنه يجب عليك أولا تحليل استعلام SQL، وتفسير AST لتحويله إلى شجرة تعبير LinQ. هذا ليس تافهة، حيث أن LINQ ليس 1: 1 متوافق مع SQL: على سبيل المثال، في LinQ، توجد مجاميع على GroupBy خارج المجموعة، بينما في SQL أنها داخلية: يجب أن تكون في نفس النطاق كما Grothby خلاف ذلك لن يعمل. هناك حاجة إلى هذا النوع من المعلومات لتحويل استفسارات LinQ إلى استعلامات SQL ولكن أيضا في الاتجاه الآخر.

لذلك لتخزين الاستفسارات، كنت اخترت طريقا مختلفا، مثل نمط المواصفات

نصائح أخرى

لا أعتقد أن هناك أي شيء مدمج في Linq-to-SQL.

من الناحية النظرية، أجرؤ على القول أنه سيكون من الممكن (على الرغم من أنه لن يضمن جولة الدوران، حيث توجد طرق مختلفة للتعبير عن نفس الاستعلام) - ولكن من الصعب جدا أن تفعل جيدا.

الشيء ما الذي يمكن أن يساعدك - LinQPad. أفترض أنه لا يمكن ترجمة SQL إلى استعلام LinQ، ولكن يمكنه ترجمة LinQ إلى SQL.

سيكون أحد الخيارات هو تتبع من رمز IL الذي تم إنشاؤه SQL. علي سبيل المثال:

SELECT TOP (50) [t0].[Id], [t0].[tralala]
FROM [pamparam] AS [t0]

يولد:

IL_0001:  ldarg.0     
IL_0002:  call        LINQPad.User.TypedDataContext.get_pamparam
IL_0007:  ldc.i4.s    32 
IL_0009:  call        System.Linq.Queryable.Take
IL_000E:  call        LINQPad.Extensions.Dump

بهذه الطريقة أمر واضح تماما، فإن استعلام LINQ سيبدو:

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