データベースに質問と回答のテーブルがあります。[参加]を使用して回答のある質問を選択し、LINQで質問と回答を取得しようとしました。これが私のコードです:
List<Question> newQuestionList =
(from q in dt.AsEnumerable()
where (q.Field<Guid>("Question") != null))
select new Question
{
Oid = q.Field<Guid>("Question"),
QuestionContext = q.Field<String>("QuestionContext"),
Priority = q.Field<Int32>("Priority"),
Order = q.Field<Int32>("OrderQuestion"),
Subject = q.Field<Guid>("Subject"),
Answers = (from a in dt.AsEnumerable()
where a.Field<Guid>("Question") == q.Field<Guid>("Question")
select
new Answer
{
Oid = a.Field<Guid>("AnswerOid"),
AnswerContext = a.Field<String>("Answer"),
IsCorrect = a.Field<bool>("Correct")
}).ToList()
}).Distinct().ToList();
同じ質問(Id)を持つ行がたくさんあります。それはすべてを繰り返します。質問に対して1回だけ繰り返す必要があります。質問が7つあり、すべての質問に4つの回答がある場合、このコードは、カウントが28のリストを表示します。カウントは7でなければなりません。誰か助けてもらえますか?
public class Question
{
private Guid oid;
public Guid Oid
{
get { return oid; }
set { oid = value; }
}
private string questionContext;
public string QuestionContext
{
get { return questionContext; }
set { questionContext = value; }
}
private int priority;
public int Priority
{
get { return priority; }
set { priority = value; }
}
private Guid subject;
public Guid Subject
{
get { return subject; }
set { subject = value; }
}
private List<Answer> answers;
public List<Answer> Answers
{
get { return answers; }
set { answers = value; }
}
private int order;
public int Order
{
get { return order; }
set { order = value; }
}
}
public class Answer
{
private Guid oid;
public Guid Oid
{
get { return oid; }
set { oid = value; }
}
private string answerContext;
public string AnswerContext
{
get { return answerContext; }
set { answerContext = value; }
}
private bool isCorrect;
public bool IsCorrect
{
get { return isCorrect; }
set { isCorrect = value; }
}
}