我需要在config中配置条件,同样的东西将用作lambda表达式Where子句的条件。 下面是我尝试的代码,但所有列表项都设置了这个值。
'ê'
那么,任何人都可以建议我如何实现这一动态概念?
答案 0 :(得分:1)
如果您尝试将条件表示为字符串,则动态LINQ可以为您执行此操作。如果您引用System.Linq.Dynamic
,那么您可以编写类似
var cond = "s2 == \"TEST1\"";
var test2List = test.Where(cond);
test2List.ToList().ForEach(_ => Console.WriteLine($"{_.s2}, {_.s3}. {_.s4}"));
cond = "s2 == \"TEST1\" || s2 == \"TEST12\"";
test2List = test.Where(cond);
test2List.ToList().ForEach(_ => Console.WriteLine($"{_.s2}, {_.s3}. {_.s4}"));
产生
TEST1, TEST2. TEST3
TEST1, TEST2. TEST3
TEST12, TEST22. TEST32
答案 1 :(得分:0)
您可以执行类似
的操作var filters = new List<Func<f_results, bool>>();
if (s2test) filters.Add(x => x.s2 == myvar);
if (s3test) filters.Add(x => x.s3 == myvar2);
test.Where (item => filters.All(item));
您可以根据需要添加多个过滤器,在各种条件下,它取决于动态但你可以做到
if (s2test & s2equals) filters.Add(x => x.s2 == myvar) else if (!s2equals) filters.Add(x => x.s2 != myvar)
等因此,如果需要,您可以使用开关来构建语句。
答案 2 :(得分:0)
根据this page,您可以使用名为Dynamic Expresso的开源库从字符串创建lambda表达式。
var prices = new [] { 5, 8, 6, 2 };
var whereFunction = new Interpreter()
.ParseAsDelegate<Func<int, bool>>("arg > 5");
var count = prices.Where(whereFunction).Count();
答案 3 :(得分:0)
我不确定我理解你想要什么,但我会尝试。
让我们说你的配置是这样的:
"s2 == TEST1"
其他时间:
"s3 == TEST2"
所以你需要创建Predict<Test2>
,身体将是这样的:
var value= item.GetType().GetField("yourConfigField").GetValue(item);
return value == yourConfigValue;
yourConfigFiled
为s2或s3且yourConfigValue
为TEST1或TEST2时