Linq to sql Linq到Sql、PredicateBuilder和定义通用逻辑

Linq to sql Linq到Sql、PredicateBuilder和定义通用逻辑,linq-to-sql,predicatebuilder,Linq To Sql,Predicatebuilder,predicatebuilder的示例展示了如何使用谓词定义通用逻辑。但我正在努力解决以下问题: 假设Product与Category有外键关系,Category有DateTime?结束日期 我可以编写一些通用逻辑来查找活动类别: public partial class Category { public static Expression<Funct<Category,bool>> IsActive() { return c=>c.End

predicatebuilder的示例展示了如何使用谓词定义通用逻辑。但我正在努力解决以下问题:

假设Product与Category有外键关系,Category有DateTime?结束日期

我可以编写一些通用逻辑来查找活动类别:

public partial class Category
{
   public static Expression<Funct<Category,bool>> IsActive()
   {
      return c=>c.EndDate.HasValue ? c.EndDate>DateTime.Now : true;
   }
}
但在查询产品时,我似乎无法使其正常工作,我希望能够编写如下内容:

Products.Where(p=>p.Category.IsActive() && p.Name.Contains("beer"));
我可以写另一种方法

public static Expresision<Func<Product,bool>> IsCategoryActive()
{
   return p=>p.Category.EndDate.HasValue ? p.Category.EndDate>DateTime.Now ? true;
}
public static expression IsCategoryActive()
{
返回p=>p.Category.EndDate.HasValue?p.Category.EndDate>DateTime.Now?true;
}

但我想避免一次又一次地定义这个逻辑。。。如果我能在产品上定义一下“包含”,我会更好。包含不是问题。。。这只是一个例子,表明我需要能够将IsActive与其他条件结合起来。至于“包含”,请参阅。包含不是问题所在。。。这只是一个例子,表明我需要能够将iActive与其他标准结合起来。
public static Expresision<Func<Product,bool>> IsCategoryActive()
{
   return p=>p.Category.EndDate.HasValue ? p.Category.EndDate>DateTime.Now ? true;
}