2011-04-10 5 views
1

저는 Entity Framework를 MySQL과 함께 사용하고 있으며 적절한 쿼리 실행을 얻을 수 없습니다. 한 가지 유형의 객체에 액세스하기위한 하나의 지점을 갖기 위해 노력하고 있습니다. 나는. 주소. 이것은 저장소에있는 내용입니다. 서비스 레이어에엔티티 프레임 워크, mysql 및 IQueryable

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 및 실행 방법에 대한 정보가 누락되었습니다.

감사합니다.

+0

왜 '주소'인스턴스로 투영합니까? 당신은'GetAddresses' 메쏘드에서'DBContext.addresses select a;'에서 단순히 return을 사용할 수 없습니까? – Slauma

답변

3

술어를 Func<Data.Address, bool>으로 정의했기 때문에 표현식으로 정의해야합니다 (Expression<Func<Data.Address, bool>>). FuncWhere 부분을 linq로 변환합니다.

+0

고맙습니다. 너 락! –