سؤال

أنا جديدة على دون سرعة الصوت وجديدة إلى حد معقول لينق كذلك ، لذلك أنا مجرد محاولة لوضع التطبيق قليلا معا.

لقد حصلت على قوالب جميع فرزها وتشغيل بخير ، ولكن لقد واجهت قليلا من المتاعب مع هذا البيان لينق (مبسطة قليلا ، البيان الحقيقي لديه بعض الصلات الأخرى لكنها لا تؤثر على هذه المشكلة بالذات لذلك لقد إزالتها للإيجاز):

var addresses = from address in Database.Addresses.All()
                           select new Address()
                               {
                                   MyNestedType = new NestedType()
                                       {
                                           Field1 = address.ADDR1
                                       }
                               };

إذا قمت بتنفيذ هذا البيان أحصل على الخطأ يلقي غير صالح من ' النظام.سلسلة ' إلى 'نستدتيب'. عندما أحاول تعداد النتائج.

أنا ربما تطل على ما هو واضح ولكن لا أستطيع أن أرى في أي مكان أن أطلب مثل هذا التحويل.

كلاهما ميدان1 و العنوان.1 هي سلاسل.

أي أفكار ما أفعله خطأ?

تحرير:

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

 public class DatabaseAddress
 {
     public int Id { get; set; }
     public string Address1 { get; set; }
 }

 public class Address
 {
     public NestedType MyNestedType;
 }

 public class NestedType
 {
     public string Field1 { get; set; }
 }

 static class Program
 {
    [STAThread]
    static void Main()
    {
         var repo = new SimpleRepository("Db", SimpleRepositoryOptions.RunMigrations);
         DatabaseAddress address1 = new DatabaseAddress();
         address1.Address1 = "Test";
         repo.Add(address1);
         var all = repo.All<DatabaseAddress>();
         var addresses = from address in repo.All<DatabaseAddress>()
                         select new Address { MyNestedType = new NestedType { Field1 = address.Address1 } };
    }
 }

في هذا المثال, all يحتوي على الكائن المضاف إلى قاعدة البيانات ، ولكن addresses إرجاع "التسلسل لا يحتوي على عناصر".

إذا كنت تستخدم أنواع مجهولة بدلا من أنواع ملموسة في select بيان يعمل.

من الواضح أن هناك فجوة في معرفتي هنا;أي مساعدة تقدير.

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

المحلول

لديك لاستدعاء توليست () ، وإلا فإن مزود دون سرعة الصوت يحاول أن يفعل شيئا مع مينستدتيب وأنه غير موجود في قاعدة البيانات.

var addresses = from address in repo.All<DatabaseAddress>().ToList()
                        select new Address { MyNestedType = new NestedType { Field1 = address.Address1 } };

تحديث:كما أنه يعمل إذا اتصلت بقائمة بعد ذلك ، أي.:

addresses.ToList().ForEach(address => Console.WriteLine("Address.MyNestedType.Field1 = {0}", address.MyNestedType.Field1));

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

نصائح أخرى

يرجى الاطلاع على سؤالي والإجابة هنا.

إليك كيف يمكنك اختبار ما إذا كانت هي نفس المشكلة:

في نموذج التعليمات البرمجية الذي نشرته ، قم بتغيير الحقل 1 في نوع التعشيش الخاص بك ليتم تسميته بالعنوان1.إعادة تشغيل العينة الخاصة بك.إذا كان يعمل ، نفس المشكلة والإصلاح أجبت مع في السؤال المرتبط يجب حلها بالنسبة لك.

جرب هذا

var nestedTypes= from address in Database.Addresses.All()
                select new NestedType()
                {
                 Field1 = address.ADDR1
                };
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top