您好我试图为文件名编写搜索工具,允许使用多个单词进行搜索。 目前我只能搜索一个单词,但我想用更多的单词组合来过滤我的结果。
到目前为止,这是我的代码:
public List<String> startYareSearch(string query, string source)
{
List<String> SearchResultList = new List<String>();
List<String> FileNameList = getFileNames(source);
foreach (string fileName in FileNameList)
{
if (fileName.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0)
{
SearchResultList.Add(fileName);
continue;
}
}
return SearchResultList;
}
我认为我需要一个从数组接收查询并生成动态if条件的函数。
举个例子:
String[] queries= new string[] { "Tobias", ".txt"};
String fileName= "blablaTobiasbla.txt";
if (fileName.IndexOf("Tobias", StringComparison.OrdinalIgnoreCase) >= 0 && fileName.IndexOf(".txt", StringComparison.OrdinalIgnoreCase) >= 0)
{
SearchResultList.Add(fileName);
continue;
}
是否可以动态创建if条件?你知道更好的解决方案吗?
答案 0 :(得分:2)
您可以使用LINQ执行以下操作:
var result= FileNameList.Where(f=>queries.Contains(f));
答案 1 :(得分:2)
如果您愿意,可以这样做
internal class Program
{
private static void Main(string[] args)
{
List<string> fileNames = new List<string> {"blablaTobiasbla.txt"};
List<string> queries = new List<string> {"Tobias", ".txt"};
var results = SearchFileNames(fileNames, queries);
}
private static IEnumerable<string> SearchFileNames(IEnumerable<string> fileNames, IEnumerable<string> queries)
{
return fileNames.Where(fileName => queries.All(fileName.Contains));
}
}
此SearchFileNames方法检查查询列表中的所有项目是否包含在文件名中,然后返回一个集合(如果有)。