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我没有意识到问题正在分析来自用户的查询。