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 回答