prasanna.raj Ответов: 1

Не знаю, как преобразовать результат преобразования объекта в общий список


Всем Привет

Я новичок в Generic, я не знаю, как преобразовать этот

public partial class Student
    {
        public int Id { get; set; }
        public string StudentCode { get; set; }
        public string StudentName { get; set; }
        public string Department { get; set; }
        public string Address { get; set; }
    }


public virtual ObjectResult<sp_StudentDetails_Result> sp_StudentDetails(string action)
       {
           var actionParameter = action != null ?
               new ObjectParameter("Action", action) :
               new ObjectParameter("Action", typeof(string));

           return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_StudentDetails_Result>("sp_StudentDetails", actionParameter);
       }


теперь я попробовал с этим

List<Student> student = new List<Student>();
           using (StudentEntities myDBEnty = new StudentEntities())
           {
               student = myDBEnty.Students.ToList();
               student = myDBEnty.sp_StudentDetails("SELECT");
           }
          return Json(student, JsonRequestBehavior.AllowGet);


и я хочу вернуться, и я получил ошибку, как

Severity	Code	Description	Project	File	Line	Suppression State
Error	CS0029	Cannot implicitly convert type 'System.Data.Entity.Core.Objects.ObjectResult<WebApplication2.Models.Data.sp_StudentDetails_Result>' to 'System.Collections.Generic.List<WebApplication2.Models.Data.Student>'	WebApplication2	E:\MVC Test\WebApplication2\WebApplication2\Controllers\HomeController.cs	46	Active


как это сделать один

Спасибо

Что я уже пробовал:

попробовал в гугле и сделал какой-то образец, но не могу этого сделать

prasanna.raj

если я использую ошибку списка, как это

Описание Кода Серьезности Состояние Подавления Строки Файла Проекта
Ошибка CS0029 не может неявно преобразовать тип ' System.Коллекции.Универсальный.Список<webapplication2.модели.данных.sp_studentdetails_result&ГТ;' к 'системе.Коллекции.Универсальный.Список<webapplication2.модели.данных.студент&ГТ;' WebApplication2 тест E:\MVC \WebApplication2\WebApplication2\контроллеры\HomeController.КС 47 активный

F-ES Sitecore

Это зависит от того, что делает StudentDetails SP. Если он возвращает строки из таблицы Student, то вам необходимо настроить SP для повторного использования объекта Student для возврата результатов, так как по умолчанию он создает новый класс sp_StudentDetails_Result для хранения результатов SP. Если ваш SP возвращает не только строки из таблицы Student, но и добавляет\удаляет некоторые столбцы, то все становится сложнее, и вам просто нужно создать список объектов Student из списка объектов sp_StudentDetails_Result, создав объект Student и скопировав свойства в коде, или использовать для этого структуру сопоставления.

Однако в принципе Entity Framework не знает, что ваш SP возвращает элементы Student, поэтому он создал новый класс, и вы не можете просто преобразовать sp_StudentDetails_Result в Student, даже если они имеют одинаковые свойства, вам нужно вручную скопировать свойства, чтобы настроить SP для повторного использования объекта Student в его результатах. Google для статей о SPs и EF и как вы это делаете, будет объяснено.

prasanna.raj

спасибо...

любая статья, если есть пожалуйста поделитесь со мной

F-ES Sitecore

Это покажет вам, как сопоставить SP с вашим собственным классом, а не использовать тот, который EF создает для вас

http://blogs.microsoft.co.il/gilf/2009/03/13/mapping-stored-procedure-results-to-a-custom-entity-in-entity-framework/

Однако это может быть не решением вашей проблемы, поскольку решение nest опирается на данные, которые вы не предоставили, и мы не знаем, что находится в вашем SP.

prasanna.raj

спасибо F-ES Sitecore ... я постараюсь

1 Ответов

Рейтинг:
1

Graeme_Grant

Я уже некоторое время не работал с EF, но можно было сгенерировать код для обертывания для POCOs (простых старых объектов Clr), поэтому требовалась переделка.

В противном случае измените:

student = myDBEnty.sp_StudentDetails("SELECT");
К:
var result = myDBEnty.sp_StudentDetails("SELECT");
и после этого установите точку останова. Теперь в окне локальные для просмотра содержимого result переменная. Теперь вы можете видеть, какая работа должна быть сделана.

Это хороший ресурс для вас: entityframeworktutorial.net[^]


prasanna.raj

спасибо за ваш повтор Graeme_Grant

я ваше право если использовать VAR это будет работа но я хочу вернуться вот так

return Json(student, JsonRequestBehavior.AllowGet);

как это сделать

Graeme_Grant

Это был не твой вопрос.

prasanna.raj

sry я пробовал с var во время отладки его работы нормально, но моя концепция хочет вернуться или хочет попасть в "студента"

Graeme_Grant

F-ES Sitecore вдается немного более подробно, чем я, но я также предположил, что способ, которым вы настроили EF, нуждается в переосмыслении. Пожалуйста, перечитайте мое решение и проверьте ссылку, предоставленную для получения дополнительной информации. Кроме того, есть много других статей о том, как сопоставить POCOs с EF (Entity Framework), так что никакой переделки или ручного сопоставления не требуется.

prasanna.raj

К. Спасибо, я постараюсь ...