2012-01-25 78 views
0

我有一個列表框,用戶可以從其預訂的總線(用於升級)中選擇一個或多個總線編號。我也有一個人已預訂的所有巴士的列表BusFactory.lstBuses將此雙重匹配轉換爲LINQ

這工作正常,但我想要的是一種方式在linq做到這一點。細分是獲取用戶選擇的所有數字,並將其與用戶預訂的總線進行匹配,並返回總線列表。

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     List<Bus> lstBuses = getSelectedBuses(); 
    } 

    private List<Bus> getSelectedBuses() 
    { 
     List<Bus> lstBus = new List<Bus>(); 
     foreach (string s in lstBuses.SelectedItems) 
     { 
      foreach (Bus bus in BusFactory.lstBuses) 
      { 
       if (s == bus.ElementNumber.ToString()) 
        lstBus.Add(bus); 
      } 
     } 
     return lstBus; 
    } 

回答

2
lstBuses.SelectedItems.Cast<string>().Intersect(
    BusFactory.lstBuses.Select(b => b.ElementNumber.ToString()) 
) 

這具有O(N)的額外益處,而不是爲O(n 2

+0

感謝您的快速反應。我如何將它添加到新的lstOfSelectedBuses中? – bitbitbot