Как определить пользовательскую оценку сервера в ядре EF? - PullRequest
2 голосов
/ 28 мая 2020

У меня есть эта сущность

public class Foo
{
   public int Id{get; private set;}
   public DateTime CreatedOn {get; private set;}
   public bool IsActive {get; private set;}
   public bool CanBeDisplayed => IsActive  && CreatedOn > DateTime.Now.AddYear(-1);
}

Я хочу, чтобы эта dbcontext.Foos.Where(f=>f.CanBeDisplayed).ToArray(); могла быть оценена на стороне сервера sql. Возможно, в классе DBContext есть атрибут или некоторая привязка, которая может дать мне работу. Моя цель - иметь расширенную модель, совместимую с ядром ef, я что-то упускаю?

1 Ответ

0 голосов
/ 28 мая 2020

Я вижу два возможных обходных пути:

  1. Введение Вычисляемый столбец и предоставление sql для него.
  2. Создание дерева выражений
public class Foo
{
    public int Id { get; private set; }
    public DateTime CreatedOn { get; private set; }
    public bool IsActive { get; private set; }
    // mark ignored for EF?
    public bool CanBeDisplayed => _compiled(this);

    private static Func<Foo, bool> _compiled = CanBeDisplayedExp.Compile();
    public static Expression<Func<Foo, bool>> CanBeDisplayedExp = f => f.IsActive && f.CreatedOn > DateTime.Now.AddYears(-1);
}

С ограничением использования dbcontext.Foos.Where(Foo.CanBeDisplayedExp).ToArray()

Также не уверен, что EF может переводить DateTime.Now.AddYears.

PS

Just FYI Linq2Db имеет вычисленные столбцы на основе выражений и Поддерживаются методы выражения .

...