Пытаетесь использовать модель multi EF в контроллере с использованием LINQ MVC? - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать мульти EF-модель в контроллере, используя LINQ, мой код:

public JsonResult Index(int prefix)
{
    List<Survey_Response> ResponseList = new List<Survey_Response>();
    SurveyAppEntities ObjectSur = new SurveyAppEntities();           
    ObjectSur.Configuration.ProxyCreationEnabled = false;
    ResponseList = (from r in ObjectSur.Survey_Response
                   join q in ObjectSur.Questions on r.SurveyID equals q.ID
                   where r.SurveyID.Equals(prefix)
                   select new { r.QuestionID, q.Text, r.Response, r.FilledBy }).ToList();
    return Json(ResponseList, JsonRequestBehavior.AllowGet);
}

У меня есть две сущности: "Suervey_Response" и "Вопросы", мне нужны данные от обеих из них

Entity "Survey_Response" is like,

    public partial class Survey_Response
    {
        public int ID { get; set; }
        public int SurveyID { get; set; }
        public int QuestionID { get; set; }
        public string Response { get; set; }
        public int FilledBy { get; set; }

        public virtual Question Question { get; set; }
        public virtual Survey Survey { get; set; }
        public virtual User User { get; set; }
    }

В запросе Linq выдается ошибка типа конверсии Anonymous в этой строке,

select new { r.QuestionID, q.Text, r.Response, r.FilledBy }).ToList();

Если вместо этих выбранных значений поставить "r", все будет работать нормально.

Надежды наваше предложение

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема, вызванная назначением списка анонимного типа, который содержит результат объединения нескольких таблиц в коллекцию List<Survey_Response>, которая не может быть неявно преобразована.Вам нужно создать другой класс для получения результатов запроса, например:

Model (Placeholder)

public class SurveyVM
{
    public int QuestionID { get; set; }
    public string Text { get; set; }
    public string Response { get; set; }
    public int FilledBy { get; set; }
}

И использовать этот класс внутри запроса LINQ, как в примере ниже:

Действие контроллера

public JsonResult Index(int prefix)
{
    List<SurveyVM> ResponseList = new List<SurveyVM>();
    SurveyAppEntities ObjectSur = new SurveyAppEntities();           
    ObjectSur.Configuration.ProxyCreationEnabled = false;
    ResponseList = (from r in ObjectSur.Survey_Response
                   join q in ObjectSur.Questions on r.SurveyID equals q.ID
                   where r.SurveyID.Equals(prefix)
                   select new SurveyVM 
                   { 
                       QuestionID = r.QuestionID, 
                       Text = q.Text, 
                       Response = r.Response, 
                       FilledBy = r.FilledBy 
                   }).ToList();
    return Json(ResponseList, JsonRequestBehavior.AllowGet);
}

Обратите внимание, что вы не можете использовать ни Survey_Response, ни Question в качестве имени таблицы, упомянутого в операторе select new, вам нужно определение третьего классакоторый содержит все свойства, определенные в обеих таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...