【问题标题】:A filter/search query where results must contain all queryTerms结果必须包含所有 queryTerms 的过滤器/搜索查询
【发布时间】:2012-10-20 09:04:19
【问题描述】:

谁能建议如何改进?

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 循环之前从列表中删除第一个查询词。

好的,这样就可以了。似乎必须有一种更优雅的方式来写这个。

有什么建议吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    【讨论】:

    • 从所有条款开始会不会效率低,还是因为还没有枚举就可以了?
    • @user1745482:可能会慢一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多