2015-12-07 47 views
0

所以我有這個需要檢查問題的答案與數據庫中的正確答案。Linq的方式來檢查一套對另一套房產的財產

Obj1.Answer == Obj2.CorrectAnswer 

而且我知道我可以做這樣的事情:

List<SimpleQuestion> listOfQ = {from user} 
List<Question> testQuestions = {from db} 
List<Question> correctAnswers = new List<Question>(); 
for (int i = 0; i < listOfQ.Count(); i++) 
{ 
    var item = testQuestions.Where(t => t.QuestionId.ToString() == listOfQ[i].QuestionId).FirstOrDefault(); 
    if (item != null) 
    { 
    if (listOfQ[i].Answer == item.CorrectAnswer.ToString()) 
    { 
     correctAnswers.Add(item); 
    } 
    }    
} 

但是,有沒有辦法在一個LINQ語句來做到這一點,其中Obj1.Answer == Obj2.CorrectAnswer返回對象的列表那匹配?這段代碼對我來說工作得很好,我只是好奇,如果有linq的方式來做到這一點 - 如果有我似乎無法弄清楚。

+1

只是順便說一句,'FirstOrDefault'可以採取拉姆達。你可以寫'testQuestions.Where(t => t.QuestionId.ToString()== listOfQ [i] .QuestionId).FirstOrDefault();'as testQuestions.FirstOrDefault(t => t.QuestionId.ToString()= = listOfQ [i] .QuestionId);' –

+1

是的,我得到resharper所有的時間告訴我。 :)它只是不是我一開始想寫的方式。 –

+0

不resharper給你一個腳本的linq化?我總是看到,這是我學習Linq的方式。 –

回答

3

我認爲你的答案就在這裏:

currectAnswers.AddRange(testQuestions.Where(
t=>listOfQ.Any(l=>l.QuestionId==t.QuestionId && 
l.Answer==t.CorrectAnswer)) 
+0

這看起來可能有效。我沒有收到任何錯誤,但我必須檢查結果。我愛linq!謝謝! –

+0

好像我得到了和我一樣的for循環的相同結果!你會得到答案,因爲對我來說,我在這裏做什麼而不是對另一個答案似乎更簡單。再次感謝! –

2
correctAnswers=listOfQ.Join(testQuestions, 
    a=>new {a.QuestionId,a.Answer}, 
    b=>new {b.QuestionId.ToString(),b.CorrectAnswer.ToString()}, 
    (a,b)=>b); 
+0

我得到一些關於類型參數不能從使用推斷出來的東西。 –

0

我們的模型類:

public class Question 
    { 
     public int Iduser; 
     public int IdQuestion; 
     public string Answer; 
     public Question(int iduser,int idquestion,string answer) 
     { 
      this.Iduser = iduser; 
      this.IdQuestion = idquestion; 
      this.Answer = answer; 
     } 
    } 

public class SimpleQuestion 
{ 
    public int IdQuestion; 
    public string Answer; 
    public SimpleQuestion(int idquestion, string answer) 
    { 
     this.IdQuestion = idquestion; 
     this.Answer = answer; 
    } 
} 

主營:

List<SimpleQuestion> listOfQ = new List<SimpleQuestion>(); 
      listOfQ.Add(new SimpleQuestion(1, "1")); 
      listOfQ.Add(new SimpleQuestion(2, "2")); 
      listOfQ.Add(new SimpleQuestion(3, "3")); 

      List<Question> testQuestions = new List<Question>(); 
      testQuestions.Add(new Question(1,1,"1")); 
      testQuestions.Add(new Question(2,2,"2")); 
      testQuestions.Add(new Question(3,3,"1")); 


      List<Question> list = (from q in listOfQ 
            join a in testQuestions on q.IdQuestion equals a.IdQuestion 
            where a.Answer == q.Answer 
            select a 
            ).ToList();