Итак, я уже знаю, что код, как это делает все, что в памяти:Entity Framework 6: Навигационные свойства Smart?
SomeDbObject.SomeNavigationProperty.Where(x => x.IsSomeBool);
В дополнение к этому (еще в памяти):
SomeDbObject.SomeNavigationProperty.AsQueryable().Where(x => x.IsSomeBool);
Итак, я пришел с дружественным решением, помогает мне убедиться, что весь вызов будет выполнен в виде команды SQL (это просто свойство на SomeDbObject):
public IQueryable<AnotherDbObject> QueryableSomeNavigationProperty
{
get
{
return SomeStaticContext.AnotherDbObjects.Where(x => x.ForeignKeyForSomeDbObject == this.Id);
}
}
Итак, как вы можете видеть, это в основном делает белым в свойстве Navigation, но он просто создает команду в формате expression-treeable, так что последующие предложения будут встроены в команду SQL. Например, то же самое утверждение, как и раньше, будет теперь возвращает IQueryable, на котором мы можем добавить пункт Где:
SomeDbObject.QueryableSomeNavigationProperty.Where(x => x.IsSomeBool);
Теперь вопрос в том, что произойдет, если я хочу запросить другое свойство навигации в ИНЕКЕ , Например:
SomeDbObject.QueryableSomeNavigationProperty.Where(x => SomeDbObject.AnotherNavigationProperty.Any());
Итак, мне нужно, чтобы сделать еще один метод, который возвращает IQueryable для SomeDbObject.AnotherNavigationProperty? Или EF делает правильную вещь здесь и строит ее в SQL-заявление?
Я могу уточнить, если необходимо, но я думаю, что это покрывает суть того, что я ищу.
Спасибо!
Какое у вас доказательство, что вышеуказанные два утверждения выполнены в памяти? – SnareChops
Поиск по этому вопросу в StackOverflow. На данный момент у меня нет ссылок. – twitchax
Отметьте IntelliTrace, чтобы узнать, что делают ваши EF querie s –