我怎样才能让这个LINQ搜索方法处理两个以上的条款? [英] How can I make this LINQ search method handle more than two terms?

查看:217
本文介绍了我怎样才能让这个LINQ搜索方法处理两个以上的条款?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的搜索方法的工作 精细最多为两个服务条款。



我怎样才能使它的动态,以便它能够处理任意数量的搜索词?

 使用系统; 
使用System.Collections.Generic;
使用System.Linq的;
使用System.Text;

命名空间TestContains82343
{
类节目
{
静态无效的主要(字串[] args)
{
名单,LT;字符串>任务=新的List<串GT;();
tasks.Add(添加合同的客户。);
tasks.Add(为客户新的合同。);
tasks.Add(创建新合同。);
tasks.Add(通过老合同去。);
tasks.Add(附加文件给客户。);

VAR filteredTasks = SearchListWithSearchPhrase(任务,合同客户);

filteredTasks.ForEach(T => Console.WriteLine(T));
到Console.ReadLine();
}

公共静态列表<串GT; SearchListWithSearchPhrase(列表<串GT;的任务,串searchPhrase)
{
的String [] =零件searchPhrase.Split(新的char [] {''});
名单,LT;字符串> sea​​rchTerms =新的List<串GT;();
的foreach(在零件串部分)
{
searchTerms.Add(part.Trim());
}

开关(searchTerms.Count())
{
案例1:在任务

收益率(从其中t。 。ToUpper的()包含(searchTerms [0] .ToUpper())
选择T).ToList();
案例2:在任务

收益率(从t其中t.ToUpper()包含(searchTerms [0] .ToUpper())及和放大器; t.ToUpper()包含。 (searchTerms [1] .ToUpper())
选择T).ToList();
默认:
返回NULL;
}

}
}
}


解决方案

如何替换

 开关(searchTerms.Count())
{
案例1:(在任务
,其中t.ToUpper()包含(searchTerms [0] .ToUpper())
选择了•从T)
的回报。了ToList();
案例2:在任务

收益率(从t其中t.ToUpper()包含(searchTerms [0] .ToUpper())及和放大器; t.ToUpper()包含。 (searchTerms [1] .ToUpper())
选择T).ToList();
默认:
返回NULL;
}



通过

 (从吨的任务
,其中searchTerms.All(长期=方式> t.ToUpper()包含(term.ToUpper()))
选择T)。了ToList();


The following search method works fine for up to two terms.

How can I make it dynamic so that it is able to handle any number of search terms?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestContains82343
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> tasks = new List<string>();
            tasks.Add("Add contract to Customer.");
            tasks.Add("New contract for customer.");
            tasks.Add("Create new contract.");
            tasks.Add("Go through the old contracts.");
            tasks.Add("Attach files to customers.");

            var filteredTasks = SearchListWithSearchPhrase(tasks, "contract customer");

            filteredTasks.ForEach(t => Console.WriteLine(t));
            Console.ReadLine();
        }

        public static List<string> SearchListWithSearchPhrase(List<string> tasks, string searchPhrase)
        {
            string[] parts = searchPhrase.Split(new char[] { ' ' });
            List<string> searchTerms = new List<string>();
            foreach (string part in parts)
            {
                searchTerms.Add(part.Trim());
            }

            switch (searchTerms.Count())
            {
                case 1:
                    return (from t in tasks
                            where t.ToUpper().Contains(searchTerms[0].ToUpper()) 
                            select t).ToList();
                case 2:
                    return (from t in tasks
                            where t.ToUpper().Contains(searchTerms[0].ToUpper()) && t.ToUpper().Contains(searchTerms[1].ToUpper())
                            select t).ToList();
                default:
                    return null;
            }

        }
    }
}

解决方案

How about replacing

switch (searchTerms.Count())
{
    case 1:
        return (from t in tasks
                where t.ToUpper().Contains(searchTerms[0].ToUpper())
                select t).ToList();
    case 2:
        return (from t in tasks
                where t.ToUpper().Contains(searchTerms[0].ToUpper()) && t.ToUpper().Contains(searchTerms[1].ToUpper())
                select t).ToList();
    default:
        return null;
}

By

(from t in tasks
 where searchTerms.All(term => t.ToUpper().Contains(term.ToUpper()))
 select t).ToList();

这篇关于我怎样才能让这个LINQ搜索方法处理两个以上的条款?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆