يلقي ilist إلى ilist باستخدام تثبيت ديناميكي
-
21-09-2019 - |
سؤال
أحاول تحويل استعلام nhibernate التالي باستخدام مثيل ثنائيu003Ct> بدلا من ilist.
IList<AllName> allNames =
(IList<AllName>)Session.CreateQuery(
@"select new AllName(
name.NameId, name.FirstName, origin.OriginId, origin.Description,
name.Sex, name.Description, name.SoundEx
) from Name name join name.Origin origin")
.SetFirstResult(skip)
.SetMaxResults(pageSize);
تشغيل هذا أحصل على الخطأ التالي:-
غير قادر على إلقاء كائن من نوع 'nhibernate.impl.queryimpl' إلى الكتابة.
أعلم أنه يمكنني العودة
IList results = Sesssion.CreateQuery(...
لكن طبقات خدمتي تتوقع
IList<AllName>
كيف يمكنني تحقيق ذلك؟
المحلول
خيار واحد هو كتابة IList<T>
تنفيذ الوكلاء إلى IList
, ، يلقي عند الاقتضاء. لا ينبغي أن يكون من الصعب للغاية القيام به ، وإن كان مملاً إلى حد ما. سوف يجعل LINQ هذا أسهل قليلاً من حيث التنفيذ IEnumerable<T>
إلخ - يمكنك فقط الاتصال بالمؤلف والاتصال الأساسي Cast<T>()
على ذلك ، على سبيل المثال.
حل آخر هو إنشاء جديد List<T>
من القائمة التي تم إرجاعها:
IList query = Session.CreateQuery(...);
IList<AllName> allNames = new List<AllName>(query.Cast<AllName>());
تحرير: كما يشير ساندر بحق ، هذا ما ToList
هو ل:
IList query = Session.CreateQuery(...);
return query.Cast<AllName>().ToList();
تحرير: كل هذا كان nhibernate -agnostic ، كما كان - أنا لا أعرف في الواقع الكثير عن nhibernate. وجدت Rippo الآن إجابة أبسط بكثير - اتصل List<AllName>
بدلا من ذلك (وهي طريقة nhibernate).