Linq to Sql, PredicateBuilder и определение общей логики - PullRequest
2 голосов
/ 26 ноября 2011

Примеры с использованием предиката показывают, как вы можете определить общую логику с помощью предикатов.Но я борюсь со следующим:

Предположим, у продукта есть отношение внешнего ключа с категорией, а у категории есть DateTime?EndDate.

Я могу написать некоторую общую логику для поиска активных категорий:

public partial class Category
{
   public static Expression<Funct<Category,bool>> IsActive()
   {
      return c=>c.EndDate.HasValue ? c.EndDate>DateTime.Now : true;
   }
}

, чтобы я мог написать

Categories.Where(Category.IsActive())

Но я не могу этого сделатьработать при запросе продуктов, я хотел бы иметь возможность написать что-то вроде:

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;
}

, но я хочу избегать определения этой логики снова и сноваеще раз ... я был бы намного лучше, если бы я мог определить это один раз на Product

...