我有一些奇怪的行为,我找不出来。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