2010-09-29 74 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 2010-09-29 16:35:18

回答

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

我還沒有訪問測試中的問題。我只能得到一個枚舉器。 – 2010-09-29 16:39:55

+1

@Sergey:固定。 – Timwi 2010-09-29 16:50:49

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。您也可以選擇一個新的問題,其中答案列表只包含正確的答案。