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ループの外側で最初のクエリ用語を最初に検索して、ループ内の交差が交差するものを作成する必要がありました。そうしないと、明らかに常に空の結果が得られます。

つまり、foreachループに入る前に、リストから最初のクエリ用語を削除する必要がありました。

わかりました、これで動作します。これを書くためのもっとエレガントな方法があるに違いないようです。

助言がありますか?

4

1 に答える 1

0

コレクション全体から始めて、すべての用語を次のように交差させることができます。

var people = AllPeople;

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