0

此链接描述了 DBSet 类。该类型实现了 IQueryable,这意味着它必须具有 AsQueryable() 的实现。但是在链接的列表中我找不到这种方法。有人可以告诉我为什么吗?

4

1 回答 1

3

正如 Eli Arbel 指出的那样,我最初的答案虽然希望有用,但并不完全正确,所以我重写了它。

该类DbSet<TEntity>具有复杂的继承层次结构。这是一个 UML 图,只显示了其中的一部分。

DbSet 继承层次结构

该方法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 回答