0

我有这个错误。“无法在 LINQ to Entities 查询中构造实体或复杂类型 'MvcApp.Models.Survey'。”

这是我的查询:

        var surveys3 = (from s in db.Surveys
                        where s.AccountId == appAcc.Id
                        select new Survey
                        {
                            Id = s.Id,
                            Title = s.Title,
                            Description = s.Description,
                            NumberOfQuestions = (from q in s.Questions
                                                 select q).Count()
                        }).ToList();
        View(surveys3);

我试图将 .ToList() 更改为 .AsEnumerable(),但是当尝试使用 foreach 循环模型时,它们的 View(surveys3) 失败

我的模型类如下所示:

public class Survey
    {
        [Required]
        [Key]
        public long Id { get; set; }

        [Required]
        [StringLength(100)]
        public string Title { get; set; }

        [DataType(DataType.MultilineText)]
        public string Description { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime CreatedOn { get; set; }

        [NotMapped]
        public Int32 NumberOfQuestions { get; set; }

        public virtual ICollection<Question> Questions { get; set; }

        [ForeignKey("AccountId")]
        public ApplicationAccount Account { get; set; }
        [Required]
        public long AccountId { get; set; }
    }
4

1 回答 1

0

这不应该工作。相反,您可以考虑创建一个视图模型来保存您需要的字段(并将您的视图更新为该类型而不是调查)并将其传递给视图或在创建新对象之前调用 ToList()。例如:

var surveys3 =  db.Surveys.Where( s => s.AccountId == appAcc.Id)
                                .ToList()
                                .Select( s => 
                                     new Survey {
                                          Id = s.Id,
                                          Title = s.Title,
                                          Description = s.Description,
                                          NumberOfQuestions = (from q in s.Questions
                                                     select q).Count()
                                           });

编辑:重新阅读您的问题和更新的代码后,我真的认为您想要在这里做的是创建一个 ViewModel 来保存您需要发送到视图的数据。您不想为正在执行的操作创建新记录,因此使用实体类来保存视图所需的数据是对实体类的滥用。如果您需要有关 ViewModel 的更多信息,请阅读以下内容:

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

于 2012-07-18T18:38:36.813 回答