調査を作成して回答を処理するためのシステムを構築しています。ビューモデルは SurveyTakeViewModel です。
namespace Survey.ViewModel
{
public class SurveyTakeViewModel
{
public Models.Survey Survey { get; set; }
public bool TakenBefore { get; set; }
}
}
namespace Survey.Models
{
public class Survey
{
[Key]
public int SurveyId { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public string MessageStart { get; set; }
public string MessageEnd { get; set; }
public virtual ICollection<Question> Question { get; set; }
}
}
namespace Survey.Models
{
public class Question
{
public virtual int SurveyId { get; set; }
[Key]
public int QuestionId { get; set; }
public int DisplayOrder { get; set; }
public string QuestionText { get; set; }
public string QuestionNote { get; set; }
public int QuestionTypeId { get; set; }
public virtual QuestionType QuestionType { get; set; }
public virtual ICollection<QuestionAnswerOption> QuestionAnswerOption{ get; set; }
public virtual ICollection<QuestionAnswer> QuestionAnswer { get; set; }
}
}
namespace Survey.Models
{
public class QuestionAnswer
{
public virtual int QuestionId { get; set; }
[Key]
public int QuestionAnswerId { get; set; }
public int SurveyId { get; set; }
public string UserId { get; set; }
public string QuestionActualResponse { get; set; }
}
}
アンケートではすべて正常に機能しますが、ユーザーが以前に回答したアンケートに再度アクセスすると、ビューモデルの QuestionAnswer 部分に特定のユーザー ID のみによる回答を入力したいと思います。さまざまなLinqクエリを試しましたが、最初はICollections<>がList<>でしたが、すべてのレコードが返される可能性があると言われました。
現時点で私が使用している
Survey = db.Survey.FirstOrDefault(s => s.SurveyId == 1)
すべての QuestionAnswer を返します
私は次のようなことを試しました
Survey = db.Survey.FirstOrDefault(a => a.Question
.Any(b => b.QuestionAnswer
.Any(c => c.UserId == userId)));
ただし、すべての userId に対してすべての QuestionAnswer を返します