2012-04-30 9 views
3

以下の問題のLINQ/Lambda式の解があるかどうかは疑問です。別のリストの真の条件に基づいて一般的なリストからアイテムを選択する

私は2つの一般的なリストを持っている

一覧私はlistFilter」から真(1)の基準に基づいて "listDataプロパティ" をフィルタリングしたい1

public class Data 
{ 
    public string ID { get; set;} 
    public string Package { get; set;} 
} 

List<Data> listData = new List<Data>(); 

Data data1 = new Data { ID = "1", Package = "Test" }; 
Data data2 = new Data { ID = "2", Package = "Test2" }; 
Data data3 = new Data { ID = "3", Package = "Test2" }; 
Data data4 = new Data { ID = "4", Package = "Test4" }; 

listData.Add(data1); 
listData.Add(data2); 
listData.Add(data3); 
listData.Add(data4); 

リスト2

List<int> listFilter = List<int>(); 

listFilter.Add(1); 
listFilter.Add(0); 
listFilter.Add(0); 
listFilter.Add(1); 

"上記の例では、data1とdata4を新しいリストに引き出す必要があります。

現時点では、以下のようにforループを使用しています。

これを達成するためにLINQまたはラムダ式を使用することができたら、私は感謝します。

一般的なケースでは感謝

バラン

+0

'どこで()'メソッドは、条件デリゲートにインデックスを渡し過負荷を持っているので、それはおそらくあなたが必要とするすべてです。 – Meligy

答えて

7
var results = listData.Where((item, index) => listFilter[index] == 1); 

注意、。

4

は、あなたが行うことができます:あなたのコードと同じlistDataプロパティがlistFilterよりも長い場合、これは失敗すること

var result = listData.Zip(listFilter, (data, filter) 
          => new { Data = data, Filter = filter }) 
        .Where(tuple => tuple.Filter == 1) 
        .Select(tuple => tuple.Data) 
        .ToList(); 
関連する問題