什么是LINQ查询的返回类型?

Dee*_*Nag 25 c# linq

是不是IEnumerable<T>.据我所知,引用总是指向一个类实例.LINQ查询真正指向的实例类型是什么?

Dan*_*mov 15

你可以通过调用它找出来.GetType()你的IEnumerable<T>变量,并检查在调试器的类型.

对于不同的LINQ提供者甚至不同的LINQ方法,这些类型可能会也可能不会有所不同.

对您的代码而言重要的是它们都实现IEnumerable<T>了您应该使用的,或者IQueryable<T>也接受表达式,这意味着您的谓词和预测将成为语法树,并且可以在运行时由LINQ提供程序操作,例如转换为SQL.

实际的类,如果这是您所询问的,甚至可能是编译器生成的,例如yield return表达式被转换为这样的类.
无论哪种方式,他们通常是内部的,你应该永远,永远依赖他们.


dev*_*vio 10

根据您的原始数据源,它是IEnumerable或IQueryable:

Linq数据库查询的结果通常是IQueryable <T>,它是从IEnumerable <T>,IQueryable和IEnumerable派生的.

如果数据库查询包含OrderBy子句,则类型为IOrderedQueryable <T>,派生自IQueryable <T>

如果您的数据源是IEnumerable,则结果类型为IEnumerable <T>

  • @Maverik:我投了你的和@Soul Reaver的答案,因为它们没有用*,这就是downvote按钮应该代表的.我认为它们没有用的原因是因为OP询问'实例类型'而不是接口,这导致我得出结论他的意思是*类型*.`IQueryable <>/IOrderedQueryable <>/IEnumerable <>`都不是正确的答案,因为**它们是接口,OP清楚地表明他自己知道接口类型**.在这个意义上,我相信@helios和我的答案是正确的,因为他们回答了OP的问题. (2认同)

hel*_*ios 3

我不知道,但我猜这是一种内部类型。你不必考虑课程。

事实上,根据具体查询,它可能是不同的类。编译器可以根据条件/处理将 LINQ 表达式转换为一种或另一种实现。