لينق وأنواع معقدة متداخلة دون سرعة الصوت
-
16-09-2020 - |
سؤال
أنا جديدة على دون سرعة الصوت وجديدة إلى حد معقول لينق كذلك ، لذلك أنا مجرد محاولة لوضع التطبيق قليلا معا.
لقد حصلت على قوالب جميع فرزها وتشغيل بخير ، ولكن لقد واجهت قليلا من المتاعب مع هذا البيان لينق (مبسطة قليلا ، البيان الحقيقي لديه بعض الصلات الأخرى لكنها لا تؤثر على هذه المشكلة بالذات لذلك لقد إزالتها للإيجاز):
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
};