После извлечения простого условия Linq2Entity для IQueryable из
orders = orders.Where(o => o.AddressId.HasValue && _validAddressIds.Contains(o.AddressId.Value));
к методу так:
orders = orders.Where(o => IsValidAddress(o.AddressId));
...
private bool IsValidAddress(long addressId)
{
return adressId.HasValue && _validAddressIds.Contains(addressId);
}
условие больше не содержится в сгенерированном SQL, оно применяется только в памяти. Почему это???





Мы должны использовать такое выражение:
public Expression<Func<T, bool>> GetFilteredAddressExpression<T>() where T : IAddress
{
return x => x.AddressId != null && _validAddressIds.Contains(x.AddressId.Value);
}