проблема в том, что у меня есть свойство в сущности:
public bool Expired
{
get { return CreationDate.AddDays(30) < DateTime.UtcNow; }
}
И, конечно, я не могу использовать его в запросах структуры сущностей, хотя он не содержит ничего, что EF не может обработать, просто он даже не пытается.
Вопрос заключается в том, можно ли как-то сохранить такие мини-запросы как свойства в сущности (например, используя Func<T, bool>
) для повторного использования при формировании более сложных запросов, таких как
Products.Where(x.Expired || x.Price > something)
UPDATE:
О, после публикации вопроса, я попробовал еще несколько запросов в Google и нашел это:
http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider
Это требует некоторого дополнительного кода, поэтому я написал CompiledExpression, используя упомянутую библиотеку для своего свойства:
private static readonly CompiledExpression<GuaranteeTransaction, bool> ShouldBeExpiredExpression =
DefaultTranslationOf<GuaranteeTransaction>
.Property(x => x.ShouldBeExpired)
.Is(x => x.CreationDate < DateTime.UtcNow.AddDays(-30));
Оказывается, AddDays также не поддерживается структурой сущностей. Я думаю, что я мог бы создать другое CompiledExpression, чтобы заменить DateTime.UtcNow.AddDays (-30) на свойство, используя тот же механизм, но это было бы смешно (с точки зрения читаемости и сложности).