2015-06-22 19 views
-3

你好,我想寫一個文件名搜索工具,允許使用多個詞搜索。 目前我只能搜索一個單詞,但我想用更多的單詞組合來過濾我的結果。如何創建一個動態的if條件

這裏是到目前爲止我的代碼:

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; 
} 

Ť認爲我需要從陣列接收的查詢的功能,並生成一個動態如果條件。

有關示例:

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; 
} 

是可能的,如果條件動態地創建一個?你知道更好的解決方案嗎?

+1

在第一個示例中將foreach放在外部foreach中出現什麼問題。 Linq也是一個替代品。 – PaulF

+0

我想你需要codeDome:https://msdn.microsoft.com/en-us/library/y2k85ax6(v=vs.110).aspx –

+0

是的,你可以。創建一個表達式作爲Func,然後在你的linq調用中傳入其中的一個(Find,Where,First等)。它會像func =()=>一些表達式; FileNameList.Find(func); – Jegan

回答

2

您可以使用LINQ做這樣的事情:

var result= FileNameList.Where(f=>queries.Contains(f)); 
+0

我想用多個查詢過濾我的搜索 –

+1

如果它們都在查詢列表中,它將起作用。 – Peter

+0

resull爲空。你知道問題是什麼嗎? –

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方法檢查然後,如果有的話,返回一個集合。

+0

結果爲空。你知道什麼問題是 –

+0

結果爲空,因爲在「Where(...)」代碼中找不到結果。 – Jegan