2011-03-01 34 views
3

我打算準備一些方法,使我已經過濾了數據庫表中的元素的集合,然後對這些集合執行查詢。 我想知道如果第一個過濾將作爲一個單獨的聲明執行或將其加入。實體框架:多個地方聲明執行計劃

例如

public IQueryable<Person> GetAlivePersons(){ 
    return db.Persons.Where(p => !p.IsDeceased); 
} 

public IQueryable<Person> GetElderPeople(){ 
    return GetAlivePersons().Where(p => p.Age > 75); 
} 

將在第二方法打DB一次或兩次?

感謝

回答

2

IQueryable翻譯在SQL中,只有當你訪問結果集。 那是因爲你的代碼碰到DB一次。 This topic解釋了這一點

+0

它可以隨時轉換爲SQL - 您可以將其轉換爲ObejctQuery並調用ToTraceString,您將獲得SQL。但它遵循與任何其他linq查詢相同的執行規則。您必須開始迭代收集或調用ToList或First等方法來執行查詢。 – 2011-03-01 09:09:25

+0

那麼,這是一個方便的方法(ToTraceString),我不知道它存在。感謝那。 – willvv 2011-03-03 18:57:27