Как каждый использует пользовательское свойство в запросе LINQ к объектам?

У меня есть класс Post который является моделью Entity Framework. Это содержит свойство как это:

public bool Showable {
  get {
    return this.Public && this.PublishedDate > DateTime.now
  }
}

Я могу использовать его в запросе как это:

from p in db.Posts where p.Showable select p;

но когда у меня есть свойство, которое использует его, как это

public IEnumerable ShowablePosts {
  get {
    return from p in db.Posts where p.Showable select p;
  }
}

затем я не могу сделать:

from p in ShowablePosts where p.Id > 42 select p;

Это говорит:

Указанный участник типа 'Showable' не поддерживается в LINQ к Объектам. Только инициализаторы, участники объекта и свойства навигации объекта поддерживаются.

16
задан 5 revs, 2 users 63% 8 April 2015 в 21:47
поделиться

2 ответа

К сожалению, Entity Framework просто не поддерживает вычисленные свойства (то есть свойство, которое возвращает вычисленное значение, а не ссылку на резервное поле), но оно может поддерживаться в будущем.

1
ответ дан 30 November 2019 в 22:10
поделиться

Вы можете сделать это, если запишете свойство как Выражение , которое можно перевести в SQL.

Вот как это сделать.

Это немного сложно, потому что это общее решение сложной проблемы.

Общая идея такова: LINQ to Entities (например, все поставщики LINQ) не могут транслировать скомпилированный код, такой как ваше свойство, в SQL во время выполнения. LINQ to Objects может выполнить скомпилированный код, но не может преобразовать его. Но они могут переводить Выражение . Итак, вы можете написать:

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 сможет это перевести. Код в сообщении, на которое я ссылаюсь, обобщает эту идею.

20
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: