2015-01-30 2 views
0

두 개의 객체 목록을 생성 중입니다. 하나의 "새로운"목록, 하나의 "오래된 목록".Linq를 사용하여 목록 업데이트

새 목록의 개체에서 하나의 속성 값을 가져 와서 일치하는 개체의 이전 목록에서 새 값으로 설정하려고합니다.

//Original Solution 
     foreach (RyderQuestion quest in myList) 
     { 
      //compare it to every question in ryder questions 
      foreach (RyderQuestion oldQuestion in _ryderQuestions) 
      { 
       //if the question ids match, they are the same question, and should have the right selected option 
       //selecting the option sets the checkbox of the MultipleChoideQuestionControl 
       if (oldQuestion.QuestionID == quest.QuestionID) 
       { 
        oldQuestion.SelectedOption = quest.SelectedOption; 
       } 
      } 
     } 

내가 조인 사용하여 더 effecient하기 위해 LINQ로 변환하려고하지만, 내가 어떻게 직접 값을 업데이트합니까?

 var x = from quest in myList 
       join oldquest in _ryderQuestions 
       on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder } 
      equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder } 
       select oldquest.SelectedOption = quest.SelectedOption; 

이 쿼리는 x 목록에 값을 반환하지만 실제로는 이전 목록의 개체를 업데이트하려고합니다. 예를 들어

+1

'LINQ'에서 할 수 없습니다. –

+0

잘 주셔서 감사합니다. – DidIReallyWriteThat

+0

최선의 방법은 다른 q에서 제안한 것입니다. http://stackoverflow.com/a/28226427/779513 –

답변

3

Linq는 을 업데이트하는이 아닌 입니다. 두리스트를 결합하여 업데이트 할 객체를 정렬 할 수 있지만, 변경하기 위해 루프해야합니다 :

var query = from quest in myList 
      join oldquest in _ryderQuestions 
      on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder } 
     equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder } 
      select new {oldquest, quest}; 

foreach(var item in query} 
    item.oldquest.SelectedOption = item.quest.SelectedOption 
+0

변수가 linq 쿼리 외부의 범위에 있습니까? – DidIReallyWriteThat

+0

나는 이것을 사용할 수 없습니까 ...? – DidIReallyWriteThat

+0

@CalvinSmith 아니요,'oldquest'와'quest'는 프로젝션 'select new {oldquest, quest}'에 의해 생성 된 새로운 익명 유형의 속성입니다. –

2

:

var x = from quest in myList 
      join oldquest in _ryderQuestions 
      on new { quest.QuestionID, quest.ShowOn, quest.QuestionOrder } 
     equals new { oldquest.QuestionID, oldquest.ShowOn, oldquest.QuestionOrder } 

      select new {quest , oldquest}; 

foreach(var item in x) 
{ 
    item.quest.SelectedOption = item.oldquest.SelectedOption; 
} 

이 말인가요?

관련 문제