我怎样才能让这个LINQ搜索方法处理两个以上的条款? [英] How can I make this LINQ search method handle more than two terms?
本文介绍了我怎样才能让这个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;字符串> searchTerms =新的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屋!
查看全文