【问题标题】:Trying to Use multi EF model in Controller using LINQ MVC?尝试使用 LINQ MVC 在控制器中使用多 EF 模型?
【发布时间】:2019-05-04 05:13:26
【问题描述】:

我正在尝试使用 LINQ 在 Controller 中使用多 EF 模型,我的代码是,

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”和“Questions”我需要来自它们的数据

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 查询在这一行给出转换类型错误匿名,

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

如果我用“r”代替这些选定的值,它就可以正常工作。

希望您的建议

【问题讨论】:

  • 匿名名单有什么信息?听起来既然使用 select r 工作正常,应该与 EF 引用有关。
  • 这是错误“无法将类型 'System.Collections.Generic.List' 隐式转换为 'System.Collections.Generic.List'”

标签: .net asp.net-mvc entity-framework linq model-view-controller


【解决方案1】:

将包含多个表连接结果的匿名类型列表分配到List&lt;Survey_Response&gt;集合中导致的问题,无法隐式转换。您应该创建另一个类来获得这样的查询结果:

模型(占位符)

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 语句中提到的表名,您需要包含两个表中定义的所有属性的第三类定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多