如何将搜索字符串转换为布尔条件?

时间:2013-05-09 07:56:35

标签: c# string search boolean

我的搜索条件存储在字符串中:

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

但是if应该将searchstr设置为boolean。

如何将此转换为布尔值?

编辑:要求是在文本框中以下列格式动态提供搜索条件 - “PwC OR(Canadian AND thrive)”。 这将用于搜索XML文件。

因此我加载了一个XML文件,并希望在LINQ中有一个Where条件,我需要使用Dynamic 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}

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我假设字符串仅引用一组特定的对象(例如,在这种情况下为rr.Value - 或者您想要的任何其他内容,只要您知道它预先)。如果是这种情况,那么:

  1. 创建一个delegate,将对象(可能被引用)作为参数 并根据需要返回bool
  2. 以编程方式在内存中编写一个定义查询的小型C#源文件 作为符合上面指定的委托的方法(具有固定名称,最好是)的主体。
  3. 使用CSharpCodeProvider类编译程序集 使用自定义函数返回所需的bool
  4. 从主程序运行动态编写和编译的代码。

答案 2 :(得分:0)

嗯,你可能会猜测它不是直截了当但同时它并不像看起来那么困难

您可以执行几个步骤来获得所需内容:

  1. 获取搜索表达式作为输入(例如“PwC OR(Canadian AND thrive)”)

  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。为了您的目的OR,AND将是运营商和PwC等将是操作数。作为解析的一部分,括号将被删除。

  4. 现在只需在您的扩展方法中调用此解析器,然后评估您获得的后缀表达式。这可以通过标准stack based evaluation再次完成。事实上,如果你解析一次标准然后只评估在哪里,那会更好。在评估时,您需要使用r.Value.Contains
  5. 替换操作数

答案 3 :(得分:0)

http://scriptcs.net/

似乎是个好方案