C# 用逻辑过滤字符串列表?

C# 用逻辑过滤字符串列表?,c#,asp.net,C#,Asp.net,我有一个字符串列表。我需要能够以类似于谷歌查询的方式过滤它们 例:不是水或(冰和“果汁”) 意思是没有单词water的返回字符串,或者如果有冰和“果汁”,则返回字符串可以有水 NET中是否有一种机制允许用户以这种形式(比如在文本框中)编写查询,并且给定一个列表或IEnumerable字符串,返回包含该字符串的查询 林克能做点像这样的事吗 我知道我可以用LINQ实现这一点,我更关心的是将任意字符串解析为可执行表达式。没有内置任何内容 您需要自己解析这样一个字符串,并可能使用这些类来构建一个可执行表

我有一个字符串列表。我需要能够以类似于谷歌查询的方式过滤它们

例:
不是水或(冰和“果汁”)

意思是没有单词water的返回字符串,或者如果有冰和“果汁”,则返回字符串可以有水

NET中是否有一种机制允许用户以这种形式(比如在文本框中)编写查询,并且给定一个列表或IEnumerable字符串,返回包含该字符串的查询

林克能做点像这样的事吗


我知道我可以用LINQ实现这一点,我更关心的是将任意字符串解析为可执行表达式。

没有内置任何内容


您需要自己解析这样一个字符串,并可能使用这些类来构建一个可执行表达式,从中进行筛选。

没有内置内容


您需要自己解析这样一个字符串,并可能使用这些类来构建一个可执行表达式,从中进行过滤。

对于此查询:表示没有单词water的返回字符串,或者如果有冰和“果汁”,则表示可以有水的返回字符串。

如果要使用
LINQ

 yourList.Where(i => !i.Contains("water") || 
                (i.Contains("water") && 
                 i.Contains("ice") && 
                 i.Contains("fruit juice")));

对于此查询:表示没有单词water的返回字符串,或者如果有冰和“果汁”,则表示可能有水的返回字符串。

如果要使用
LINQ

 yourList.Where(i => !i.Contains("water") || 
                (i.Contains("water") && 
                 i.Contains("ice") && 
                 i.Contains("fruit juice")));

在LINQ:
list.Where(item=>!item.Contains(“水”)|(item.Contains(“冰”)和item.Contains(“果汁”))
在LINQ:
list.Where(item=>!item.Contains(“水”)|(item.Contains(“冰”)和item.Contains(“果汁”))

我想我们不能用代码示例回答您,因为正如您所说,这更符合逻辑

在这种情况下,我要做的是预先定义条件(保存在某个地方),其中包含您需要的所有条件以及它们的“编码转换”,如:

  • 而不是
  • 等等

在运行时,您要做的是将这些条件/条件转换为sql或linq或任何您需要将其传递给的语言

我认为我们无法使用代码示例回答您,因为正如您所说,这更符合逻辑

在这种情况下,我要做的是预先定义条件(保存在某个地方),其中包含您需要的所有条件以及它们的“编码转换”,如:

  • 而不是
  • 等等

在运行时,您要做的是将这些条件/条件转换为sql或linq或任何您需要将其传递给的语言

您可以尝试使用数据表。选择方法:

public static class ExpressionExtensions {

  public static IEnumerable<T> Select<T>(this IEnumerable<T> self, string expression) {
    var table = new DataTable();
    table.Columns.Add("Value", typeof(T));

    foreach (var item in self) {
      var row = table.NewRow();
      row["Value"] = item;
      table.Rows.Add(item);
    }

    return table.Select(expression).Select(row => (T)row["Value"]);
  }

}
还要注意,在这种情况下,由于字符串
果汁
已经包含字符串
,因此第二个条件是多余的。你必须找到一种表达“单词”而不是“子字符串”的方法


最后,您最好自己实现解析逻辑。

您可以尝试使用
数据表。选择
方法:

public static class ExpressionExtensions {

  public static IEnumerable<T> Select<T>(this IEnumerable<T> self, string expression) {
    var table = new DataTable();
    table.Columns.Add("Value", typeof(T));

    foreach (var item in self) {
      var row = table.NewRow();
      row["Value"] = item;
      table.Rows.Add(item);
    }

    return table.Select(expression).Select(row => (T)row["Value"]);
  }

}
还要注意,在这种情况下,由于字符串
果汁
已经包含字符串
,因此第二个条件是多余的。你必须找到一种表达“单词”而不是“子字符串”的方法


最后,您最好自己实现解析逻辑。

您在开始时错过了
而不是
。这对任何其他输入都没有帮助您在开始时错过了
而不是
。这对任何其他输入都没有帮助。我知道我可以用LINQ实现这一点,我更关心的是将任意字符串解析为可执行表达式。我很惊讶.NET没有用于令牌解析的功能。我知道我可以用LINQ实现这一点,我更关心将任意字符串解析为可执行表达式。我很惊讶.NET没有用于令牌解析的功能。当用户输入其他内容时?@Oded yeah我没有意识到问题是关于解析用户的查询。当用户输入其他内容时?@Oded yeah我没有意识到问题正在分析来自用户的查询。