Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将搜索字符串转换为布尔条件?_C#_String_Search_Boolean - Fatal编程技术网

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

C# 如何将搜索字符串转换为布尔条件?,c#,string,search,boolean,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 t

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

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作为布尔值

如何将其转换为布尔值

编辑:要求在文本框中以以下格式动态给出搜索条件-“PwC或(加拿大和茁壮成长)”。 它将用于搜索XML文件

因此,我加载了一个XML文件,并希望在LINQ中有一个Where条件,我需要使用动态LINQ,但其中不允许使用字符串,而且我还需要处理一些大括号

考虑到这一点,我从XML中获取了结果集(需要搜索的标记值)

理想情况下,我想尝试一下:

var query=selectedbook.Where(searchstr)


你需要做一些工作来实现这一点,但这是可能的

您应该看看动态LINQ库。这允许您将LINQ条件(和其他子句)指定为字符串,并像LINQ运算符一样执行它们

从ScottGu博客上的解释开始,然后点击以下链接:
要实现这一点,您需要做一些工作,但这是可能的

您应该看看动态LINQ库。这允许您将LINQ条件(和其他子句)指定为字符串,并像LINQ运算符一样执行它们

从ScottGu博客上的解释开始,然后点击以下链接:

我假设字符串只引用一组特定的对象(
r
r.Value
,例如,在本例中-或您想要的任何其他对象,只要您事先知道)。如果是这种情况,则:

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

  • 我假设字符串只引用一组特定的对象(例如,在本例中是
    r
    r.Value
    ,或者任何您想要的对象,只要您事先知道)。如果是这种情况,则:

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

  • 好吧,你可能猜不到这是一个直截了当的问题,但同时它也不是一个看起来那么难的问题

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

  • 获取搜索表达式作为输入(例如“PwC或(加拿大和茁壮成长)”)

  • XElement
    上编写一个扩展方法,该方法返回true并将搜索条件作为输入。然后您将能够使用

    var selectedBook = from r in 
    document.Root.Descendants("Archives").Elements("Headline").Elements("Para")
    where r.SatisfiesCriteria(searchCriteria)
    select r;
    
  • 编写一个解析器类来解析
    searchCritera
    ,并以解析后的格式存储它。(例如,您可以将其转换为后缀符号)。这是很容易的,你可以用它。出于您的目的或,AND将是运算符,PwC等将是操作数。作为解析的一部分,括号将被删除

  • 现在只需从扩展方法中的with调用此解析器,然后计算得到的后缀表达式。这同样可以通过标准来实现。事实上,如果您只解析一次标准,然后只在where中求值,那就更好了。求值时,需要将操作数替换为
    r.Value.Contains

  • 好吧,你可能猜不到这是一个直截了当的问题,但同时它也不是一个看起来那么难的问题

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

  • 获取搜索表达式作为输入(例如“PwC或(加拿大和茁壮成长)”)

  • XElement
    上编写一个扩展方法,该方法返回true并将搜索条件作为输入。然后您将能够使用

    var selectedBook = from r in 
    document.Root.Descendants("Archives").Elements("Headline").Elements("Para")
    where r.SatisfiesCriteria(searchCriteria)
    select r;
    
  • 编写一个解析器类来解析
    searchCritera
    ,并以解析后的格式存储它。(例如,您可以将其转换为后缀符号)。这是很容易的,你可以用它。出于您的目的或,AND将是运算符,PwC等将是操作数。作为解析的一部分,括号将被删除

  • 现在只需从扩展方法中的with调用此解析器,然后计算得到的后缀表达式。这同样可以通过标准来实现。事实上,如果您只解析一次标准,然后只在where中求值,那就更好了。求值时,需要将操作数替换为
    r.Value.Contains

  • 这似乎是一个很好的场景

    这似乎是一个很好的场景

    只要使用
    bool
    而不是
    string
    ?或者是否使用其他条件?您将如何使用此搜索字符串?要过滤datatable、dataview、sql查询?字符串从何而来?人们从何而来?只需使用
    bool
    而不是
    string
    ?或者是否使用其他条件?您将如何使用此搜索字符串?要过滤datatable、dataview、sql查询?字符串从何而来?人们从何而来?我认为这对于XML是不可能的…我在阅读动态LINQ示例时读到了一些东西
    var selectedBook = from r in 
    document.Root.Descendants("Archives").Elements("Headline").Elements("Para")
    where r.SatisfiesCriteria(searchCriteria)
    select r;