为什么类DBSet的AsQueryable()不在MSDN文档中?

时间:2016-07-13 14:04:23

标签: .net dbset asqueryable

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

2 个答案:

答案 0 :(得分:2)

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

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

DbSet inheritance hierarchy

方法AsQueryable<TEntity>()是在IEnumerable<TEntity>上定义的扩展方法,可将IEnumerable<TEntity>转换为IQueryable<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()都缺失了。

答案 1 :(得分:-2)

MSDN文档在记录事物的方式上往往不一致。如果您不喜欢它,每页底部都会有一个链接提供反馈。

在这种情况下,他们已经列出了明确实现的接口,并且它们提供了这些接口的链接,假设您足够聪明,可以知道如何遵循它们。

编辑:我认为人们误解了我的“假设你足够聪明”的评论,因为某种意见被放下了。我的意思是MSDN编写者假设你足够聪明地跟随它们,所以他们不需要复制所有内容。