2012-07-28 113 views
0

是否有可能將此代碼轉換爲一個LINQ查詢。我可以發誓我之前曾做過這樣的事情,但我無法弄清楚代碼可能在哪裏。我想要執行一個子查詢並修改所選項目的值,如果一個列表具有另一個列表的值。將多個LINQ查詢轉換爲1?

var selectInstructors = _instructorService.GetAllNonGuestInstructors() 
              .Select(i => new SelectListItem() 
                 { 
                  Text = i.User.ToFullName(), 
                  Value = i.Id.ToString() 
                 }).ToList(); 

var selectedItems = schedule.Instructors 
         .Select(instructior1 => selectInstructors.FirstOrDefault(s => s.Value == instructior1.Id.ToString())) 
         .Where(selectedItem => selectedItem != null); 

foreach (var selectedItem in selectedItems) 
{ 
    selectInstructors.Remove(selectedItem); 
    selectedItem.Selected = true; 
    selectInstructors.Add(selectedItem); 
} 

因此,讓我們在selectInstructors列表假設我有這些值: 約翰·史密斯,1 李四,2 戴夫·裏特,3 (我們反覆持久性教官之前selected布爾值是默認假)

schedule.Instructors類有教師,該計劃的持久列表: 約翰·史密斯,1 戴夫·裏特爾,3

現在,我想要做的是設置任何Selected性質的selectInstructors什麼當值等於schedule.Instructors

+1

你能否澄清你想達到的目標?即涉及哪些實體,它們的關係是什麼以及您的輸出應該是什麼?代碼是相當混亂... – Spikeh 2012-07-28 13:50:41

+0

@Spikeh,我認爲這將是顯而易見的我正在與一個SelectList集合,並希望設置一個布爾值,如果完整列表的ID匹配類似列表中的ID值。我會更新我想的問題。不知道爲什麼倒票。 – DDiVita 2012-07-28 14:33:06

回答

2
var selectedIds = schedule.Instructors.Select(i => i.Id.ToString()).ToList();  

var instructors = (from instructor in _instructorService.GetAllNonGuestInstructors() 
        let value = instructor.Id.ToString() 
        select new SelectListItem() 
        { 
         Text = instructor.User.ToFullName(), 
         Value = value, 
         Selected = selectedIds.Contains(value) 
        }).ToList(); 
1
  var allInstructors = _instructorService.GetAllNonGuestInstructors(); 
     if(allInstructors!=null) 
      allInstructors.Select(i => 
        new SelectListItem() { Text = i.User.ToFullName(), Value = i.Id.ToString() }). 
        Zip(schedule.Instructors,(selectedItems,instructor)=> 
        {var item = selectedItems.FirstOrDefault(s => s.Value == instructior.Id.ToString()); 
         if(item!=null) 
          item.Selected=true;}); 
     //Now use allInstructors collection further it will have Selected true according to your conditions. 

爲什麼selectedItem屬性被刪除,然後加我不明白一兩件事。無論如何,我希望這會有所幫助。

+0

我只是將其從集合中刪除,以便我可以在selectInstructors集合中更新該項目。這只是執行更新的草率方式,直到我可以找出你提供的東西! – DDiVita 2012-07-28 14:48:50