0

このエラーが発生しています。「エンティティまたは複合型 'MvcApp.Models.Survey' は、LINQ to Entities クエリで構築できません。」

これは私のクエリです:

        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を作成することだと思います。ビューに必要なデータを保持するためにエンティティクラスを使用して、実行していることに対して新しいレコードを作成したくない場合は、エンティティクラスの誤用です。ViewModelsについてさらに情報が必要な場合は、以下をお読みください。

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

于 2012-07-18T18:38:36.813 に答える