1

これは簡単なはずですが、頭を包むことができませんでした。これが今のやり方ですが、とても無駄に思えます。

あります

List<string> committees

List<string> P.committees

一方のリストにもう一方のリストに含まれている文字列があるかどうかを確認したいだけです。

  List<Person> listFilteredCommitteesPerson = new List<Person>();

            foreach (Person p in listFilteredPerson)
            {
                foreach (string strCommittee in p.Committees)
                {
                       if (committees.Contains(strCommittee))
                       {
                           listFilteredCommitteesPerson.Add(p);
                       }
                }
            }

            listFilteredPerson = listFilteredCommitteesPerson;
4

1 に答える 1

3

ブール値の場合:

var match = 
   committees.Intersect(listFilteredPerson.SelectMany(p => p.Committees)).Any();

一致するコレクションが必要な場合Personは、次を使用できます。

var peopleThatMatch = 
    listFilteredPerson.Where(p => committees.Intersect(p.Committees).Any());

また:

var peopleThatMatch = 
    listFilteredPerson.Where(p => p.Committees.Any(s => committees.Contains(s)));

HashSet<T>大規模なコレクションがある場合は、パフォーマンス上の理由から、別のコレクション タイプ ( など) を検討することをお勧めします。

于 2012-08-29T19:00:25.940 に答える