是IEnumerable<T>
吗?据我所知,引用总是指向一个类实例。 LINQ查询真正指向的实例类型是什么?
答案 0 :(得分:16)
您可以在.GetType()
变量上调用IEnumerable<T>
并检查调试器中的类型来找到它。
对于不同的LINQ提供程序甚至不同的LINQ方法,这些类型可能会也可能不会有所不同。
对您的代码而言,重要的是它们都实现了您应该使用的IEnumerable<T>
,或IQueryable<T>
也接受表达式,这意味着您的谓词和预测将成为语法树,并且可以在运行时由LINQ提供者操纵,例如被翻译成SQL。
实际类,如果这是你要问的,甚至可能是编译器生成的,例如yield return
表达式被翻译成这样一个类
无论哪种方式,它们通常是内部的,你永远不应该永远依赖它们。
答案 1 :(得分:10)
根据您的原始数据源,它是IEnumerable或IQueryable:
Linq数据库查询的结果通常为IQueryable<T>,它源自IEnumerable&lt; T&gt;,IQueryable和IEnumerable。
如果您的数据库查询包含OrderBy子句,则类型为IOrderedQueryable<T>,派生自IQueryable&lt; T&gt;
如果您的数据源是IEnumerable,则结果类型为IEnumerable<T>
答案 2 :(得分:3)
我不知道,但我猜这是一种内部类型。你不必考虑这门课。
实际上,根据具体的查询,它可能是不同的类。编译器可以根据条件/处理将LINQ表达式转换为一个或另一个实现。
答案 3 :(得分:0)
如果我没有记错,IEnumerable< T >
,其中T取决于您的查询
答案 4 :(得分:0)
您可以检查here三部分查询操作。您可以看到LINQ查询的返回类型是IEnumerable&lt; int&gt;。