This link描述了类DBSet。这个类实现了IQueryable,这意味着它必须有一个AsQueryable()的实现。但是在链接列表中我找不到这种方法。 有人可以告诉我为什么吗?
答案 0 :(得分:2)
我最初的答案虽然有用但并不完全正确,正如Eli Arbel所指出的那样,我已经重写了它。
DbSet<TEntity>
类具有复杂的继承层次结构。这是一个UML图,仅显示其中的一部分。
方法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编写者假设你足够聪明地跟随它们,所以他们不需要复制所有内容。