структура сущностей, mysql и IQueryable

Я использую Entity Framework с MySQL и не могу получить правильное выполнение запроса. Я пытаюсь иметь одну точку для доступа к типу объекта. т.е. Адрес. Это то, что у меня есть в репозитории.

public IQueryable<Address> GetAddresses()
        {
            return from a in DBContext.addresses
                   select new Address
                   {
                       Id = a.instance,
                       City = a.city,
                       Country = a.country,
                       Owner = a.owner,
                       PostalCode = a.postcode,
                       Street = a.street
                   };

        }

На сервисном уровне я добавляю предикат, который будет добавлен к объекту IQueryable, и выполняю запрос.

public Data.Address GetAddress(Func<Data.Address, bool> predicate)
        {
            List<Data.Address> items = referenceDataRepository.GetAddresses().Where(predicate).FirstOrDefault();

return items;
        }

предикат будет ( x => x.Owner = 233 ). При проверке журнала MySQL я вижу, что выполняемый запрос НЕ включает предложение where, и кажется, что предикат применяется после возврата всех адресов, что очень дорого.

Я что-то упустил в отношении IQueryable и того, как он выполняется.

Спасибо.


person Blerim J    schedule 10.04.2011    source источник
comment
Почему вы проецируете на экземпляр Address? Разве вы не можете просто использовать return from a in DBContext.addresses select a; в своем методе GetAddresses?   -  person Slauma    schedule 11.04.2011


Ответы (1)


Это потому, что вы определили предикат как Func<Data.Address, bool>, вы должны определить его как выражение: Expression<Func<Data.Address, bool>>. Func преобразует вашу часть Where в linq для объектов.

person Ladislav Mrnka    schedule 10.04.2011