1

作成した次の LINQ コードがあります。

 QuestionDetail questions = _questionsRepository
                .GetAll()
                .Include(q => q.Answers)
                .Select(m => new QuestionDetail
                {
                    QuestionId = m.QuestionId,
                    Text = m.Text,
                    Answers // << I am not sure how to populate this
                            // << I need to have a new collection 
                            // << created from a subset of the m.Answers
                })
                .FirstOrDefault();

ICollection<AnswerDetail> Answers私の問題は、QuestionDetail の一部であるコレクションを作成する方法がわからないことです。私が必要としているのは、m.Answers から何らかの方法で選択し、これを使用して AnswerDetail コレクションにデータを入力することです。Answers はコレクションであるため、 new AnswerDetail を使用できないことはわかっています。

誰でも助けて、どうすればこれができるか教えてもらえますか。

以下に、このためのクラスのいくつかをリストしました。簡単にするために、質問と回答のクラスからいくつかのフィールドを削除しました。

public class QuestionDetail
{
    public int QuestionId { get; set; }
    public string Text { get; set; }
    public virtual ICollection<AnswerDetail> Answers { get; set; }
}

public class AnswerDetail
{
    public int AnswerId { get; set; }
    public string Text { get; set; }
}

public class Answer
{
    public int AnswerId { get; set; }
    public int QuestionId { get; set; }
    public Nullable<bool> Correct { get; set; }
    public Nullable<bool> Response { get; set; }
    public string Text { get; set; }
    public virtual Question Question { get; set; }
}

public class Question
{
    public Question()
    {
        this.Answers = new List<Answer>();
    }
    public int QuestionId { get; set; }
    public string Text { get; set; }
    public string Image { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}
4

3 に答える 3

2

私が見ることができるものについては、これはうまくいくはずです:

Answers = m.Answers.Select(a => 
              new AnswerDetail { AnswerId = a.AnswerId, 
                                 Text = a.Text }).ToList(),

のリストがAnswerあり、それらを のリストに変換しますAnswerDetail

于 2013-09-15T14:08:57.773 に答える
1

これを試して:

「外側」の FirstOrDefault プロジェクト結果の代わりに Take(1) :

QuestionDetail questions = _questionsRepository
        .GetAll()
        .Include(q => q.Answers)
        .Take(1)
        .ToList()
        .Select(m => new QuestionDetail
        {
            QuestionId = m.QuestionId,
            Text = m.Text,
            Answers = m.Answers.Select(a => 
                              new AnswerDetail { AnswerId = a.AnswerId, 
                                                 Text = a.Text }).ToList()
        });
于 2013-09-15T14:49:29.637 に答える
1

のサブセットが必要で、q.Answers実行できる条件がある場合:

QuestionDetail questions = _questionsRepository
            .GetAll()
            .Include(q => q.Answers)
            .Select(m => new QuestionDetail
            {
                QuestionId = m.QuestionId,
                Text = m.Text,
                Answers = m.Answers.Where(x=>yourCondition)
            })
            .FirstOrDefault();
于 2013-09-15T14:05:32.363 に答える