此链接描述了 DBSet 类。该类型实现了 IQueryable,这意味着它必须具有 AsQueryable() 的实现。但是在链接的列表中我找不到这种方法。有人可以告诉我为什么吗?
问问题
1136 次
1 回答
3
正如 Eli Arbel 指出的那样,我最初的答案虽然希望有用,但并不完全正确,所以我重写了它。
该类DbSet<TEntity>
具有复杂的继承层次结构。这是一个 UML 图,只显示了其中的一部分。
该方法AsQueryable<TEntity>()
是定义的扩展方法IEnumerable<TEntity>
,将 转换IEnumerable<TEntity>
为 anIQueryable<TEntity>
并且作为DbSet<TEntity>
实现IEnumerable<TEntity>
,您可以使用扩展方法:
IQueryable<MyEntity> queryable = myDbSet.AsQueryable();
但是,它不是很有用,因为它DbSet<TEntity>
也实现IQueryable<TEntity>
了所以调用AsQueryable()
只会返回IQueryable<TEntity>
接口。您不妨将上面的代码段编写为:
IQueryable<MyEntity> queryable = myDbSet;
此行为在Queryable.AsQueryable()
您正在寻找的文档中进行了解释。
链接的文档页面确实包含许多扩展方法是正确的,但是由于原则上可能的扩展方法的范围是无限的,因此不能保证所有扩展方法都会在列表中。特别是两者AsQueryable()
都AsEnumerable()
缺失。
于 2016-07-13T15:24:46.590 回答