我正在使用實體框架與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的一些事情以及它是如何執行的。
謝謝。
爲什麼你投射到一個「地址」的實例?難道你不能簡單地使用'從DBContext.addresses中選擇一個'返回''GetAddresses'方法嗎? – Slauma 2011-04-10 20:00:12