我有一个列表,我必须过滤子属性.过滤器运算符是动态的,我正在使用谓词构建器来组合多个过滤器/ lambdas.
为简单起见,我们假设我有两个这样的类:
public class FirstClass
{
public int Id { get; set; }
public ICollection<SecondClass> MyList { get; set; }
}
public class SecondClass
{
public int ReferenceId { get; set; }
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的过滤器使用引用id,运算符类型和值,这样伪代码就像这样:
"list of FirstClass".Where(param1 =>
param1.MyList.Single(param2 =>
param2.ReferenceId == "reference id").Value "operatorType" "value")
Run Code Online (Sandbox Code Playgroud)
实际的过滤器类似于123 eq 456,其中引用标识为123,operatorType为"eq",值为456.
如果运算符只是相等,那么以下工作就可以了:
Expression<Func<FirstClass, bool>> lambda =
param1 => param1.MyList.Single(param2 => param2.ReferenceId == id).Value == value;
Run Code Online (Sandbox Code Playgroud)
此外,仅FirstClass使用动态表达式进行过滤,就像魅力一样,例如过滤Id(我的ExpressionTypeDictionary是用于ExpressionType根据提供的选择的字典operatorType): …