过滤器/搜索查询,其中结果必须包含所有queryTerms

时间:2012-10-30 23:08:53

标签: c#

有人可以建议如何改进吗?

public IEnumerable<Person> FindPersons(string queryTerms)
        {
            if (queryTerms == null)
                return new List<Person>();

            var queryTermsList = queryTerms.Split(' ').ToList();

            var first = queryTermsList.First();

            queryTermsList.Remove(first);

            var people = FindPerson(first);

            foreach (var queryTerm in queryTermsList)
            {
                people = people.Intersect(FindPerson(queryTerm));
            }

            return people;
        }

它的基本功能是在queryTermList中搜索包含每个queryTerm的人。

因为结果必须包含我使用过的所有术语。

因为我使用了交叉,所以我必须在foreach循环之外进行初始搜索第一个查询项,这样循环中的相交就会有一些东西要交叉。否则你显然总是得到空的结果。

这意味着我需要在进入foreach循环之前从列表中删除第一个查询词。

好的,这样可行。似乎必须有更优雅的方式来写这个。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以从整个集合开始,并将所有术语与之相交:

var people = AllPeople;

foreach (var queryTerm in queryTermsList)
{
    people = people.Intersect(FindPerson(queryTerm));
}