您可以尝试使用以下DataTable.Select
方法:
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"]);
}
}
但是你必须按照它的格式来创建你的表达式:
var filtered = strings.Select("NOT Value LIKE '*water*' OR (Value LIKE '*ice*' AND Value LIKE '*fruit juice*')");
另请注意,在这种情况下,由于 stringfruit juice
已经包含 string ice
,因此第二个条件是多余的。您必须找到一种表达“单词”而不是“子字符串”的方法。
最后,您最好自己实现解析逻辑。