2013-05-09 69 views
1

我有存儲在一個字符串搜索條件:如何將搜索字符串轉換爲布爾條件?

string Searchstr = "(r.Value.Contains("PwC") || (r.Value.Contains("Canadian") && r.Value.Contains("thrive"))) || (r.Value.Contains("Banana") && r.Value.Contains("Gayle"))" 

我想用這一個if語句來檢查值:

if(searchstr) 
{ 
    then do this.... 
} 

但如果應該有一個字符串searchstr布爾。

如何將它轉換爲布爾?

編輯:要求是動態給出搜索條件在以下格式的文本框 - 「普華永道OR(加拿大和繁榮)」。 這將用於搜索XML文件。

因此,我已經加載了一個XML文件,並希望有一個LINQ Where條件的,我需要使用動態LINQ,但字符串不是在允許的,也是我有一些括號來處理。

的,我已經採取了從XML(標記值,我需要搜索)結果集

var selectedBook = from r in document.Root.Descendants("Archives").Elements("Headline").Elements("Para") 
            select r; 

,並會非常喜歡嘗試像

思考:

var query=selectedbook.Where(searchstr) 

OR

if(searchstr){....then do this} 
+0

一個很好的方案,以取代操作數只是使用'bool',而不是'string'?或者是其他地方使用的標準 – Sayse 2013-05-09 07:59:11

+0

您將如何使用此搜索字符串?過濾數據表,數據視圖,SQL查詢? – Ric 2013-05-09 07:59:22

+0

字符串從哪裏來? – 2013-05-09 08:06:15

回答

1

您需要做一些工作才能做到這一點,但這是可能的。

你應該看看在動態LINQ庫。這允許您將LINQ條件(和其他子句)指定爲字符串並像LINQ運算符一樣執行它們。

開始對ScottGu的博客中解釋,並按照鏈接: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

+0

我認爲這不可能用於XML ......我在閱讀動態LINQ示例時讀過某處,它只能用於LINQ to SQL。不知道,但我試過了,但沒有結果。 – 2013-05-09 11:31:12

+1

我認爲最好的方法是構建一個[表達式樹](http://msdn.microsoft.com/en-us/library/bb397951.aspx),我懷疑這是在做什麼。不,您可以隨時將表達式樹編譯成任何LINQ提供程序都可接受的普通函數。 – Rup 2013-05-09 12:37:06

0

我假設該字符串將只引用一組特定對象(rr.Value在這種情況下,例如 - 或任何你想要的東西,只要你事先知道)。如果是這樣的話,那麼:

  1. 創建一個delegate,是以對象(可以參考)作爲參數 並返回一個bool,只要你想。
  2. 編程寫入在存儲器中定義查詢 作爲方法的主體(具有固定名稱,優選地)一個小的C#源文件符合上述規定的委託。
  3. 使用CSharpCodeProvider類編譯的程序集 與返回你想要的bool您的自定義功能。
  4. 從主程序運行動態編寫和編譯的代碼。
+2

我認爲表達式樹會比CodeDom更簡單。 – Rup 2013-05-09 12:39:06

0

那麼你可能猜到它不會是直線前進,但在同一時間,因爲它看起來

您可以執行一些步驟來得到你想要的東西並不難問題:

  1. 獲取搜索表達式作爲輸入(例如,「普華永道OR(加拿大和成長)」)

  2. XElement返回true,並採取搜索標準編寫擴展方法的輸入。然後,您將能夠使用

    var selectedBook = from r in 
    document.Root.Descendants("Archives").Elements("Headline").Elements("Para") 
    where r.SatisfiesCriteria(searchCriteria) 
    select r; 
    
  3. 編寫解析searchCritera並將其存儲在解析的格式分析器類。 (例如,您可以將其轉換爲後綴表示法)。這很容易,你可以使用standard algorithm這個。爲了您的目的或者,將是運營商和普華永道等將是操作數。括號將作爲解析的一部分被刪除。

  4. 現在只需在您的擴展方法中調用此解析器,然後評估您獲得的後綴表達式。這也可以通過標準stack based evaluation完成。事實上,如果你解析標準一次,然後只在哪裏評估,那會更好。在評估你需要r.Value.Contains
相關問題