结合目前我有一个表示MONSTOROUSLambda
在Expression<Func<Project, bool>>
形式我这样做是为了取代Linq
循环的重复量的表达式树。如何表达式树的氮量与和/或运营商
这里是冰山的一角。
return prj => !FilterCriteria.IsFilterEnabled && prj.OrganizationID != null
|| (((FilterCriteria.OrganiazaitonId == null) || organizationIDs.Contains(prj.OrganizationID.Value))
|| ((FilterCriteria.ActivityTypeId == null) || (act.ActivityTypeID == FilterCriteria.ActivityTypeId))
&& ((FilterCriteria.ProductLineId == null) || (prj.ProductLineID == FilterCriteria.ProductLineId))
&& ((FilterCriteria.ProjectTypeId == null) || (prj.ProjectTypeID == FilterCriteria.ProjectTypeId))
&& ((FilterCriteria.ProjectId == null) || (prj.ProjectID == FilterCriteria.ProjectId))
&& ((FilterCriteria.StartDateFrom == null) || (prj.StartDate >= FilterCriteria.StartDateFrom))
//... this goes on for about 40 more lines
我已分组这些expression trees
分为6大类,并希望基于条件语句把它们结合起来。 基本例如
if(...){
Expression<Func<Project, bool>> filterEnabled = prj => !FilterCriteria.IsFilterEnabled && prj.OrganizationID != null;
}
else if(...){ //combined with `OR` statement
Expression<Func<Project, bool>> organizations = prj => organizationIDs.Contains(prj.OrganizationID.Value);
}
else if (...){ //combined with `AND` statement
var projectType = prj => (prj.ProjectTypeID == FilterCriteria.ProjectTypeId);
}
...
我怎样才能将这些成一个单一的expression tree?
这应该很简单,只需使用'Expression.And'或'Expression.Or'调用来聚合单个表达式树调用 –