سؤال

ونحن بحاجة لتوليد الاستفسارات LINQ التي هي 100٪ غير معروفة خلال الترميز (وقت التصميم). وذلك لأن المنطق هو متاح في إطار عملنا الذي هو 100٪ وفصلها عن أي مشاريع البيانات. بالنسبة للبيانات التي نستخدمها LLBLGen إنشاء التعليمات البرمجية الوصول إلى البيانات.

وعادة باستخدام يتضرع على DLL، الذي نحدده نحن في الإطار (وليس مرجع) يمكننا خلق رمز لاسترداد البيانات. ولكن الآن نحن بحاجة إلى القيام بذلك عن طريق LINQ. كيف يمكننا إنشاء استعلام مثل:

var q = from customer in m.Customer
        select new
        {                   
            customer.Number,
            customer.City,
            customer.CountryEntity.Name             
        };

ومن السلاسل فقط. سيكون لدينا 1 سلسلة تسمى "العملاء" لذلك نحن نعرف أن لدينا لاسترداد من العملاء. ثم سيكون لدينا سلسلة [] التي تحتوي على fieldnames نريد لاسترداد. وكما ترون هذه الأعمدة ويمكن أن تشمل الأنواع المعقدة (المجالات ذات الصلة).

وأي نصيحة، وخصوصا في تركيبة مع LLBLGen، سيكون أمرا رائعا!

وشكرا، ثرثرة

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

المحلول

ولست متأكدا إذا كان هذا هو بالضبط ما تبحث عن ولكن سكوت قو لديه وظيفة على بلوق حول استخدام LINQ الحيوية. <وأ href = "http://weblogs.asp.net/scottgu/archive/2008 /01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx "يختلط =" نوفولو noreferrer "> http://weblogs.asp.net/scottgu/archive/2008/ 7/1 / دينامية-LINQ جزء-1-استخدام رأس LINQ دينامية-استعلام library.aspx

قد لا تفعل كل ما تحتاجه لكنها قد تحصل على بعض من الطريق.

وتحرير. كنت مجرد وجود نظرة على بعض نموذج التعليمات البرمجية التي كان سكوت قو، ووجدت أنها يمكن أن تفعل جزء حدد التي تحتاج إليها. مثال (وهذا هو رمز سكوتس):

Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
                OrderBy("CompanyName"). _
                Select("New(CompanyName as Name, Phone)")

وكما ترون بت السفلي لديه لديه حدد ديناميكية.

وأيضا إلى حل مشكلة معرفة حيوي أي كائن الاستعلام في وقت التشغيل، هل يمكن أن شيئا من هذا القبيل:

 Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
    Dim i = Myobject.Select("New(customer.Number)")
 End Sub

وبعد ذلك هل يمكن أن مجرد القيام التبديل قليلا بعد قراءة الأسماء من قاعدة البيانات، كما يلي:

Sub PassIt()
    Dim name = "customer"
    Select Case name
        Case "customer"
            query(m.Customer)
    End Select
End Sub

ويساعد هذا الأمل. ملحوظة! سيكون هناك طريقة أفضل للقيام الجزء الأخير (طريقة passit) ولكن لفي الصباح الباكر إلى التفكير في الأمر.

واسف كان الجواب في VB كان يجب أن يتم ذلك في C #

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