我有一个简单的情况,我需要查询2个实体。
public class Rating{
public Category Category {get;set;}
public Rating Value {get;set;} //an enum
public virtual Property Property {get;set;}
public DateTime Date {get;set;}
}
public Property{
public ICollection<Rating> Ratings {get;set;}
}
我有一个现有的Expression<Func<Property, bool>>
,用于过滤特定评级的属性。
public Expression<Func<Property, bool>> PropertyLowRating()
{
return (p) => p.Ratings.OrderByDescending(cr => cr.Date)
.FirstOrDefault().Ratings == ComplianceRating.Low;
}
我在上面的属性中使用了一些不同的表达式。这些检查特定评级/缺乏等...
我现在也希望能够对附加到评级的Category
进行过滤,而无需添加大量其他表达。
所以我补充道:
//class property
List<string> categoryNames = new List<string>();
public Expression<Func<Rating, bool>> FilterRatings()
{
return (rating) =>
(categoryNames.Contains(null) && rating.Category == null) ||
(categoryNames.Contains(rating.Category .Name));
}
我似乎无法做到:
public Expression<Func<Property, bool>> PropertyLowRating()
{
return (p) => p.Ratings.Where(FilterRatings()).OrderByDescending(cr => cr.Date)
.FirstOrDefault().Ratings == ComplianceRating.Low;
}
根据所需类别的实例属性自动过滤返回的合规性评级。
如何最有效地将表达式嵌套在另一个表达式中以保持DRY?