0

谁能建议如何改进?

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 的人。

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

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

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

好的,所以这行得通。似乎必须有一种更优雅的方式来写这个。

有什么建议么?

4

1 回答 1

0

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

var people = AllPeople;

foreach (var queryTerm in queryTermsList)
{
    people = people.Intersect(FindPerson(queryTerm));
}
于 2012-10-30T23:10:56.070 回答