Свойство Entity Framework 4.1 с логикой для использования в запросе - PullRequest
4 голосов
/ 02 ноября 2011

проблема в том, что у меня есть свойство в сущности:

    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) на свойство, используя тот же механизм, но это было бы смешно (с точки зрения читаемости и сложности).

1 Ответ

0 голосов
/ 04 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...