كيفية تحديد الأعمدة التي يمكن أن عاد من linq to sql الاستعلام

StackOverflow https://stackoverflow.com/questions/1015979

سؤال

أنا أحاول فقط إعادة بعض الأعمدة من linq to sql الاستعلام ولكن إذا كنت تفعل, فإنه يلقي الاستثناء:

صريحة بناء كيان نوع 'InVision.البيانات.موظف في الاستعلام لا يسمح

هنا كود:

return db.Employees.Select(e => new Employee()
       { EmployeeID = e.EmployeeID, FirstName = e.FirstName,
         LastName = e.LastName }).ToList();

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

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

المحلول

في الأساس, إذا كنت ترغب فقط في الأعمدة ، حدد تلك.إذا كنت تريد الموظف الكيان حدده.لا يوجد حل وسط هنا.أوصي ضد إنشاء فئة جديدة فقط من أجل هذا.يوك!

هل هذا:

return db.Employees
   .Select(e => new { e.EmployeeID, e.FirstName, e.LastName })
   .ToList();

نصائح أخرى

لأن لدي للقتال مع Linq2Sql و التسلسل قبل أن أنصح باستخدام كائن عرض للتعامل مع هذا السيناريو بدلا من Linq2Sql الكيان.انها أسهل بكثير من حل:

return db.Employees
        .Select( e => new EmployeeView() 
        { 
            EmployeeID = e.EmployeeID, 
            FirstName = e.FirstName, 
            LastName = e.LastName 
         }).ToList();

البديل الآخر هو سحب نسخة جديدة من جدول "الموظفين" في DBML مصمم اسم هو شيء مختلف مثل SimpleEmployee حذف جميع العلاقات وإزالة كافة الأعمدة التي لا تحتاج إليها.

جاستن ،

شرح هذا الخطأ هنا:http://devlicio.us/blogs/derik_whittaker/archive/2008/04/25/linq2sql-explicit-construction-of-entity-exception.aspx

شيء واحد يمكنك القيام به هو إنشاء فئة derrives من الموظف.

public class EmployeeProxy : Employee
{
}

ثم يمكنك أن تفعل الاستعلام الخاص بك:

return db.Employees.Select(e => new EmployeeProxy { EmployeeID=e.EmployeeID, FirstName=e.FirstName, LastName=e.LastName }).ToList();

من ناحية أخرى, إذا كنت تحتاج فقط إلى تسلسل مجموعة النتائج إلى تفعيل جافا سكريبت, ثم يمكنك أيضا استخدام مجهول الطبقات.هذا يعمل بشكل جيد:

return db.Employees.Select(e => new { EmployeeID=e.EmployeeID, FirstName=e.FirstName, LastName=e.LastName }).ToList();

ويساعد هذا الأمل.

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