2012-10-30 31 views
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中搜索包含EVERY queryTerm的人。

因爲結果必須包含所有使用Intersect的術語。

因爲我正在使用相交,所以我必須首先搜索foreach循環之外的第一個查詢詞,這樣循環中的相交點纔會有交叉點。否則,你顯然總是會得到空的結果。

這意味着我需要在進入foreach循環之前從列表中刪除第一個查詢詞。

好的,所以這個工程。看來必須有更優雅的寫作方式。

有什麼建議嗎?

回答

0

您可以直接開始與整個收集和交叉都與條款:

var people = AllPeople; 

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

請問這是低效開始的所有條款,或因爲它尚未列舉這將是確定? – user1745482

+0

@ user1745482:可能會慢一點。 – SLaks