結合目前我有一個表示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'調用來聚合單個表達式樹調用 –