2010-09-29 2 views
0

У меня есть 3 классаАгрегация. Linq для объектов запроса

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 к объектам.

+0

Что вы хотите сказать? Пожалуйста, отредактируйте свой вопрос, чтобы содержать фактический * вопрос *. – Timwi

ответ

1

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

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

У меня нет доступа для вопросов в тесте. Я могу получить только счетчик. –

+1

@Sergey: Исправлено. – Timwi

1

Во-первых, ваши вопросы и ответы являются закрытыми. Я предполагаю, что у вас есть открытый аксессуар «Вопросы и ответы», соответственно.

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

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)}; 

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

Смежные вопросы