Aggregation. Запрос Linq к объектам - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть 3 класса

public class Test
{
   private List<Question> _questions;
   private string _text;

   public string Text
   {
      get
      {
         return _text;
      }
    }

   //...
}


public class Question
{
   private List<Answer> _answers;
   private string _text;

   public string Text
   {
      get
      {
         return _text;
      }
   }
   //...
}

public class Answer
{
   private string _text;
   private bool _isCorrect;

   public string Text
   {
      get
      {
         return _text;
      }
   }

   public bool isCorrect
   {
      get
      {
         return _isCorrect;
      }
    }

   //...
}

Мне нужно выбрать текст из вопросов и текст из ответов, где ответ правильный.
Я могу выбрать только правильные ответы.

Test t;
//Initializing t
var r = t.SelectMany<Question, Answer>(q => q).Where<Answer>(a => a.isCorrect == true);

Мой вопрос: как выбрать текст из вопросов и текст из ответов, где ответ правильный.Мне нужно сделать запрос linq to objects.

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Прежде всего, ваши вопросы и ответы являются частными. Я предполагаю, что у вас есть общедоступные Вопросы и ответы, соответственно.

Попробуйте это:

var results = from q in t.Questions
              where q.Answers.Any(a=>a.isCorrect)
              select new {Question = q, CorrectAnswers = q.Answers.Where(a=>a.isCorrect)};

Теперь вы можете ссылаться на результаты. Вопрос и результаты. Правильные ответы. Вы также можете выбрать новый вопрос, в котором список ответов содержит только правильные ответы.

1 голос
/ 29 сентября 2010

Предполагается, что Test реализует IEnumerable<Question> и Question реализует IEnumerable<Answers>:

var questionsWithCorrectAnswers = myTest
    .SelectMany(q => q.Where(a => a.IsCorrect)
                      .Select(a => new { Question = q, Answer = a }));
...