2012-01-25 50 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