我的问题有点复杂,所以我用下面的例子简化了它。
假设我有一个简单的整数列表。我在函数中接收两个条件输入参数,它们告诉我如何过滤。类似这样:
public class input{
public string operation = "less than";//can be <=, >=, !=, ==,<. >, etc.
public integer filter = 9;
}
字符串
我想根据传入的条件进行动态过滤,但我需要将其作为“OR”子句。
如何动态地创建一个linq查询,而不像这样对每个组合进行硬编码:
/*
input one = { operation = "less than" , filter = 9 }
input two = { operation = "equal to", filter =10 }
arraytoFilter { 1,2,3,4,5,6,7,8,9,10,11,12 }
*/
public int[] myFilter(input one, input two, int[] arraytoFilter){
if (one.operation == "less than" && two.operation == "equal to"){
return arraytoFilter.Where(x => x < one.filter || x == two.filter)
}
if (one.operation == "less than or equal to" && two.operation == "greater than"){
return arraytoFilter.Where(x => x <= one.filter || x > two.filter)
}
/// rest of all combinations (how do I avoid doing this???)
return arrayToFilter;
}
型
2条答案
按热度按时间2exbekwf1#
[更新11/20 ]
这可以在没有NuGet包的情况下通过使用
System.Linq.Expressions
构建表达式来完成:字符串
您可以使用
System.Linq.Dynamic.Core
包来编写动态LINQ查询。下面的程序已在1.3.5版本中测试:型
u7up0aaq2#
您应该需要强大的 * System.Linq.Expressions * 来构造表达式树和过滤器。
字符串
呼叫方方法:
型