3

以下の問題に対するLINQ/Lambda式の解決策があるかどうか疑問に思っています。

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

リスト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);

「listFilter」の true (1) 基準に基づいて「listData」をフィルタリングしたいと思います。上記の例では、data1 と data4 を新しいリストにプルできる必要があります。

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

List<Data> listResult =  new List<Data>();
for(int index=0; index<listData.Count; index++)
{
    if(listFilter[index]==1)
    {
       listResult.Add(listData[index]);
    }

}

これを実現するためにLINQまたはラムダ式を使用する方法を教えていただければ幸いです。

ありがとう

バラン

4

3 に答える 3

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

コードと同じように、listData が listFilter よりも長い場合、これは失敗することに注意してください。

于 2012-04-30T01:35:59.347 に答える
4

一般的なケースでは、次のことができます。

var result = listData.Zip(listFilter, (data, filter) 
                          => new { Data = data, Filter = filter })
                     .Where(tuple => tuple.Filter == 1)
                     .Select(tuple => tuple.Data)
                     .ToList();
于 2012-04-30T01:35:06.960 に答える
0
var listResult = listData
    .Where((data, index) => listFilter[index] == 1)
    .ToList();

参照:

http://msdn.microsoft.com/en-us/library/bb548547.aspx

于 2012-04-30T01:38:32.190 に答える