2016-11-12 35 views
0

我有問題的表和答案的表LINQ - 連接兩個表和的右側部分獲得的值加入,如果它存在拋出異常

我總是需要,無論顯示的問題清單和有一個corresponsing asnwer,我要抓住這個問題的答案(響應)

我用下面的代碼

var Questions = db.Questions.Where(x => x.isActive); 
var Answers = db.Answers.Where(x => x.AssessmentID == 99); 

AssessmentResponseVM model = new AssessmentResponseVM(); 
foreach (var question in Questions) 
{ 
    AnswerAndQuestions q = new AnswerAndQuestions { }; 
    q.QuestionText = question.QuestionText; 
    q.QuestionID = question.ID; 
    q.Response = Answers.Where(a => a.QuestionID == question.ID).SingleOrDefault().Response; <--- throws exception if there is no answer for the question 
    model.Questions.Add(q); 
} 

但得到這個錯誤

Object reference not set to an instance of an object. 

在此行中

q.Response = Answers.Where(a => a.QuestionID == question.ID).SingleOrDefault().Response; 
+1

你不能得到一個對象的屬性是'null'的價值 - 測試'null'第一,如果沒有,則訪問'Response'財產 –

+0

'VAR答案= Answers.Where( a => a.QuestionID == question.ID).SingleOrDefault(); if(answer!= null){q.Response = answer.Response; } –

+0

@StephenMuecke這就是我決定這樣做的方式 – totalitarian

回答

0

變化

q.Response = Answers.Where(a => a.QuestionID == question.ID).SingleOrDefault().Response; 

這個代碼

q.Response=Answers.Any(a=>a.QuestionID==question.ID)?Answers.firstOrDefault(a => a.QuestionID == question.ID).Response:new Response(); 
+0

'IQueryable '不包含'firstOrDefault'的定義,並且沒有找到接受'IQueryable '類型的第一個參數的擴展方法'firstOrDefault'你錯過了一個使用指令或程序集引用?) – totalitarian

+0

@totalitarian;然後嘗試使用singleorDefault() –

0
q.Response = Answers.Any(a => a.QuestionID == question.ID) ? Answers.Where(a => a.QuestionID == question.ID).FirstOrDefault().Response; 
+0

語法錯誤':'預期 – totalitarian

0

如果你允許使用C#6.0中,我會建議嘗試新的null-conditional operator

q.Response = Answers.Where(a => a.QuestionID == question.ID).SingleOrDefault()?.Response; 

它返回nullAnswers.Where(a => a.QuestionID == question.ID).SingleOrDefault()返回默認值,即空。

如果您需要別的東西,而不是null,您可以使用null-coalescing operator

q.Response = Answers.Where(a => a.QuestionID == question.ID).SingleOrDefault()?.Response ?? response, what you need; 
相關問題