Вы можете сделать это, если напишите свойство как Expression
, которое переводится в SQL.
Вот как это сделать.
Это немного сложно, потому что это общее решение сложной проблемы.
Общая идея такова: LINQ to Entities (например, все LINQ провайдеры) не может преобразовать скомпилированный код, такой как ваше свойство, в SQL во время выполнения. LINQ to Objects может выполнить скомпилированный код, но не может перевести его. Но они могут перевести Expression<T>
. Чтобы вы могли написать:
public static Expression<Func<Post, bool>> WhereActive
{
get
{
return p => p.Public && p.PublishedDate > DateTime.Now;
}
}
Тогда вы могли бы написать:
public IEnumerable<Post> ShowablePosts
{
get
{
return db.Posts.Where(WhereActive);
}
}
... и LINQ to Entities может перевести это. Код в посте, на который я ссылаюсь, обобщает эту идею.