实体框架嵌套表达式在不同类型上

时间:2014-12-06 16:35:25

标签: c# entity-framework linq-expressions

我有一个简单的情况,我需要查询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?

0 个答案:

没有答案