我有一些奇怪的行爲,我找不出來。IEnumerable/IQueryable擴展的奇怪行爲(沒有延遲加載?)
下面的兩個方法應該從我的理解(這顯然是錯誤的)給予IQueryable的行爲相同,但他們不這樣做。
如果我用IQueryable調用第一個對象(該對象是顯式用作IQueryable的實體框架中的DbSet),它看起來像不使用延遲加載(它對數據庫執行掃描)。當我用同一個對象調用第二個方法時,它看起來像我想要的那樣工作(它在數據庫上執行查找)。
於是,兩個問題:
這究竟是爲什麼?
我可以(以及如何)使最通用的方法(與IEnumerable)「正常」工作? (因爲我有更多的擴展和不想重複代碼,我想,以避免超載,只是複製粘貼的方法,身體像下文)
我使用EF 4.1針對SQL Server Express的工作2008數據庫
public static TEntity GetByID<TEntity>(this IEnumerable<TEntity> list, long id) where TEntity : Identifiable
{
return list.SingleOrDefault(e => e.ID == id);
}
public static TEntity GetByID<TEntity>(this IQueryable<TEntity> list, long id) where TEntity : Identifiable
{
return list.SingleOrDefault(e => e.ID == id);
}
IEnumerable擴展方法無法按照您希望的方式工作。 – hatchet