0

LINQを使用して、これを思いつきました:

records.RemoveAll(x => 
    !(x.MyList.Contains(values[0]) || x.MyList.Contains(values[1]) || x.MyList.Contains(values[2]) || ... )
);
  • recordsList<CustomObject>それはList<string> MyList
  • valuesは ですが、インデックスによるアクセスを必要としないソリューションがあればOrderedDictionary、代わりに簡単に にすることができます。Dictionary<string,string>

valuesこのコードに関する私の問題は、事前にサイズがわからず、このようにハードコーディングできないことです。ここで for または foreach ループを使用する方法はありますか? または、他にどのようにこのコード行を達成できますか?

4

3 に答える 3

3

みたいな感じになると思います

records.RemoveAll(x => 
    !(values.Any(v=>x.MyList.Contains(v)))
);
于 2013-06-05T19:35:28.353 に答える
2

これを試して:

var values = new OrderedDictionary()
{
    { "A", null },
    { "B", null },
    { "C", null },
    { "D", null },
    { "E", null },
};
var records = new List<CustomObject>
{
    new CustomObject{ Id = 1, MyList = new List<string>(){ "A", "B" }},
    new CustomObject{ Id = 2, MyList = new List<string>(){ "C", "F" }},
    new CustomObject{ Id = 3, MyList = new List<string>(){ "G", "H" }}
};

records.RemoveAll(record => !record.MyList.Any(item => values.Contains(item)));
foreach (var record in records)
{
    Console.WriteLine("Id={0}, MyList={1}",
        record.Id, String.Join(", ", record.MyList.ToArray()));
}
于 2013-06-05T19:41:20.630 に答える
0

これも機能します...

records.Except(values.Select(v => v.Value)).ToList().ForEach(a => records.Remove(a.ToString())) ;
于 2013-06-05T19:39:51.373 に答える