現在、私は私がLinq
とループの繰り返しの量を置き換えるためにこれをしたExpression<Func<Project, bool>>
の形でMONSTOROUSLambda
を表す式ツリーを持っています。どのようにして式ツリーのN量を組み合わせることおよび/またはオペレーター
ここはアイスバーグの先端です。
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);
}
...
はどうすればこれらは1つだけの式ツリーの呼び出しで様々な表情を集約するExpression.And
またはExpression.Or
呼び出しを使用し、単一expression tree?
これは単純で、単にExpression.AndまたはExpression.Orを使用します。単一の式ツリーでさまざまな式を集約するための呼び出し –