سؤال

<ع> استخدام 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/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library .aspx اتصال ) I تشغيل الاستعلام أدناه والتي بإرجاع IQueryable. على هذه النتيجة التي هي أيضا IEnumerable وأنا قادرة على تشغيل عدد () ولكن لم يكن هناك ToList () للحصول على القيم. يمكنني تعداد عليها باستخدام foreach لكن لست قادرا على الوصول إلى الحقول الفردية في نوع مجهول الناتجة دون تفكير. هل هذه هي الطريقة الوحيدة؟ بفضل

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

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }

والصب حاول ولكن حدث خطأ غير قادر على تحويل كائن من نوع 'DynamicClass1' لكتابة 'اختبار'.

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

و}

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

المحلول

وأنت لا يمكن أن نتوقع نوع أنت كائن حيوي لحلها في وقت الترجمة عندما يتم حل الاستعلام الخاص بك في وقت التشغيل. هذا ما هو LINQ الديناميكي كل شيء: أنه يسمح لك لتنفيذ استعلامات الحيوية على حساب الترجمة لمرة والتحقق

ولديك لاستخدام التفكير للوصول إلى خصائص النوع الديناميكي، على الأقل حتى C # 4.

نصائح أخرى

وإذا كان IEnumerable ليس عام ثم يجب عليك أن يلقي بدلا من استخدام التفكير.

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