2013-01-10 42 views
0

我同時使用LINQ面臨的一個問題,我想知道是否有這個代碼庫LINQ的List內連接查詢

GetCompletePackQuestion(int id) 
    { 
     var query = from q in DbSet where q.id == id 
        join a in DbContext.Set<answers>() on id equals a.question_id 
        join cc in DbContext.Set<correct_answers>() on id equals cc.question_id 
        select new CompletePackModel 
        { 
         Id = q.id, 
         Question = q.question, 
         CorrectAnswer = cc.answers.id, 
         Answers = q.answers.Select(ans => ans.answer) 
        }; 

     return query.SingleOrDefault(); 
    } 

的CompletePackModel內快速的解決方案給出了答案財產一個字符串列表.. 所以問題是:有一個問題有很多答案,所以雖然q.id是一個int,問一個字符串和answer_id一個id(嗯,我真的應該把表中的字符串連接到ID)...最後一個a.answer應該是一個清單...

有沒有一種方法可以解決這個問題?

感謝


爲什麼它給我3結果在查詢,而不是一個?

回答

0

我假設你正在使用實體框架(基於我看到的DbContext對象)。在這種情況下,您的問題類應該已經有一系列答案。然後你需要做類似的事情:

select new CompletePackModel 
{ 
    Id = q.id, 
    Question = q.question,        
    CorrectAnswer = from answ in DbContext.Set<answers>() where answ.id == a.id select answ.answer, 
    Answers = q.answers.Select(a => a.answer).ToList() 
}; 
+0

是的,有q.answers反而是entityobject..but我只需要該實體的字符串字段...我需要編輯搶字符串我的字符串列表... –

+0

(」 m當然假設是'a.answer') – IronMan84

+1

感謝年輕的tonystark ... –

0

這會做詭計嗎?

var query = from q in DbContext.Set<questions>() 
       join a in DbContext.Set<answers>() on q.id equals a.question_id 
       join cc in DbContext.Set<correct_answers>() on q.id equals cc.question_id 
       select new CompletePackModel 
       { 
        Id = q.id, 
        Question = q.question,        
        CorrectAnswer = cc.answer, 
        Answers = DbContext.Set<answers>().Where(answ => answ.question_id == q.id).ToList() 
       }; 
+0

.. mmm ..它似乎不工作...無論如何,在出口處加入我已經有一組((答案)排隊的問題...從那個組我應該脫掉字符串字段... –

+0

你有'join cc in DbContext.Set ( )'和'CorrectAnswer'結果字段。他們應該一起去? –

+0

是的,他們應該..謝謝你的幫助..鐵人的概率給了我提示.. –