В 99% всех случаев вы не хотите использовать оператор соединения.Entity Framework автоматически генерирует для вас SQL JOINS при использовании свойств навигации.
var instruction = await _context.Instructions.Where(i => i.Property...).FirstOrDefaultAsync().ConfigureAwait(false);
Обратите внимание, что в зависимости от того, используете ли вы EF6 или EF Core или с другой конфигурацией, отложенная загрузка может быть отключена (если нетЯ настоятельно рекомендую вам отключить его, поскольку это является узким местом с большой производительностью).
Поэтому вы должны использовать метод Include
для активной загрузки связанной сущности.
var instruction = await _context.Instructions.Include(i => i.Property).Where(i => i.Property...).FirstOrDefaultAsync().ConfigureAwait(false);
Нопрежде чем делать это, подумайте, действительно ли вам нужен Instruction
.Если нет, ваш код может стать:
var property = await _context.Properties.Where(p => p.Instructions.Any(i => ...)).FirstOrDefaultAsync().ConfigureAwait(false);
Обратите внимание, что вы должны расширить свой класс Property
, чтобы он работал, чтобы иметь обратную ссылку
public partial class Property
{
// No need for the Key attribute, as this is convention
public int Id { get; set; }
public Address Correspondence { get; set; }
public int CorrespondenceId { get; set; } // Not needed in this scenario, but good practice
public ICollection<Instruction> Instructions { get; } = new HashSet<Instruction>();
}