2012-01-25 8 views
0

私はリストボックスを用意しています。リストボックスでは、予約したバス(アップグレード用)からバス番号を1つ以上選択できます。私はまた、人が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よりもO(N)(N )

+0

という追加の利点を有しています。これを新しいlstOfSelectedBusesに追加するにはどうすればよいですか? – bitbitbot

関連する問題