Ваш запрос не возвращает всех адресов на одного клиента. Он не возвращает никакого адреса вообще. Адреса загружаются впоследствии из-за отложенной загрузки при доступе к свойствам навигации. Это второй запрос, и отложенная загрузка всегда возвращает все адреса.
Если вы хотите получить желаемый результат в одном запросе к базе данных, вам нужен прогноз для загрузки адресов клиентов и AND в операции select
.
Используя ваши свойства навигации (я думаю, у вас есть некоторые из-за тега под вашим вопросом), это будет выглядеть так:
var result = MCDBContext.Customers
.Where(customer => customer.IsActive && customer.CustomerPIN.Equals(
pin, StringComparison.InvariantCultureIgnoreCase)
&& customer.CustomerCases.Any(ccase =>
ccase.IsActive
&& ccase.CustomerCasePhones.Any(phone =>
phone.IsActive
&& phone.PhoneNumber.Equals(
phoneNumber, StringComparison.InvariantCultureIgnoreCase))
&& ccase.CustomerCaseAddresses.Any(address =>
address.IsActive
&& address.AddressTypeID == 6)))
.Select(customer => new
{
Customer = customer,
// you can also fetch here cases and phones, if you need them
Addresses = customer.CustomerCases.Where(ccase => ccase.IsActive)
.Select(ccase => ccase.CustomerCaseAddresses
.Where(address => address.IsActive && address.AddressTypeID == 6))
})
.ToList();
Это не заполняет коллекцию адресов в дереве объектов клиента, а только возвращает список анонимных объектов: у каждой записи есть клиент и отфильтрованные адреса этого клиента.