2011-04-10 108 views
1

我正在使用實體框架與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

爲什麼你投射到一個「地址」的實例?難道你不能簡單地使用'從DBContext.addresses中選擇一個'返回''GetAddresses'方法嗎? – Slauma 2011-04-10 20:00:12

回答

3

這是因爲您將謂詞定義爲Func<Data.Address, bool>,您必須將其定義爲表達式:Expression<Func<Data.Address, bool>>Func將您的Where零件轉換爲linq對象。

+0

謝謝你。你搖滾! – 2011-04-10 20:17:52