рамки сущностей, MySQL и IQueryable - PullRequest
1 голос
/ 10 апреля 2011

Я использую 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 и как он выполняется.

Спасибо.

1 Ответ

3 голосов
/ 11 апреля 2011

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

...