كيفية تحديد الأعمدة التي يمكن أن عاد من linq to sql الاستعلام
-
06-07-2019 - |
سؤال
أنا أحاول فقط إعادة بعض الأعمدة من 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();
ويساعد هذا الأمل.