Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) 方法  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回类型化为 IEnumerable<T> 的输入。
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TSource> ^ AsEnumerable(System::Collections::Generic::IEnumerable<TSource> ^ source);
	public static System.Collections.Generic.IEnumerable<TSource> AsEnumerable<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);
	static member AsEnumerable : seq<'Source> -> seq<'Source>
	<Extension()>
Public Function AsEnumerable(Of TSource) (source As IEnumerable(Of TSource)) As IEnumerable(Of TSource)
    类型参数
- TSource
 
              source 的元素类型。
参数
- source
 - IEnumerable<TSource>
 
要作为 IEnumerable<T> 键入的序列。
返回
已作为 IEnumerable<T> 键入的输入序列。
示例
下面的代码示例演示如何在需要标准查询运算符实现时使用 AsEnumerable<TSource>(IEnumerable<TSource>) 隐藏类型的自定义 Where 方法。
// Custom class.
class Clump<T> : List<T>
{
    // Custom implementation of Where().
    public IEnumerable<T> Where(Func<T, bool> predicate)
    {
        Console.WriteLine("In Clump's implementation of Where().");
        return Enumerable.Where(this, predicate);
    }
}
static void AsEnumerableEx1()
{
    // Create a new Clump<T> object.
    Clump<string> fruitClump =
        new Clump<string> { "apple", "passionfruit", "banana",
            "mango", "orange", "blueberry", "grape", "strawberry" };
    // First call to Where():
    // Call Clump's Where() method with a predicate.
    IEnumerable<string> query1 =
        fruitClump.Where(fruit => fruit.Contains("o"));
    Console.WriteLine("query1 has been created.\n");
    // Second call to Where():
    // First call AsEnumerable() to hide Clump's Where() method and thereby
    // force System.Linq.Enumerable's Where() method to be called.
    IEnumerable<string> query2 =
        fruitClump.AsEnumerable().Where(fruit => fruit.Contains("o"));
    // Display the output.
    Console.WriteLine("query2 has been created.");
}
// This code produces the following output:
//
// In Clump's implementation of Where().
// query1 has been created.
//
// query2 has been created.
Dim output As New System.Text.StringBuilder
' A custom class.
Class Clump(Of T)
    Inherits List(Of T)
    ' Constructor.
    Public Sub New(ByVal collection As IEnumerable(Of T))
        MyBase.New(collection)
    End Sub
    ' Custom implementation of Where().
    Function Where(ByVal predicate As Func(Of T, Boolean)) As IEnumerable(Of T)
        output.AppendLine("In Clump's implementation of Where().")
        Return Enumerable.Where(Me, predicate)
    End Function
End Class
Sub AsEnumerableEx1()
    ' Create a new Clump(Of T) object.
    Dim fruitClump As New Clump(Of String)(New String() _
                                       {"apple", "passionfruit", "banana",
                                        "mango", "orange", "blueberry",
                                        "grape", "strawberry"})
    ' First call to Where():
    ' Call Clump's Where() method with a predicate.
    Dim query1 As IEnumerable(Of String) =
    fruitClump.Where(Function(fruit) fruit.Contains("o"))
    output.AppendLine("query1 has been created." & vbCrLf)
    ' Second call to Where():
    ' First call AsEnumerable() to hide Clump's Where() method and thereby
    ' force System.Linq.Enumerable's Where() method to be called.
    Dim query2 As IEnumerable(Of String) =
    fruitClump.AsEnumerable().Where(Function(fruit) fruit.Contains("o"))
    output.AppendLine("query2 has been created.")
    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub
' This code produces the following output:
'
' In Clump's implementation of Where().
' query1 has been created.
'
' query2 has been created.
	注解
方法AsEnumerable<TSource>(IEnumerable<TSource>)除了将 的source编译时类型从实现IEnumerable<T>IEnumerable<T>的类型更改为自身之外,没有其他效果。
              AsEnumerable<TSource>(IEnumerable<TSource>) 当序列实现时,可用于在查询实现之间进行选择, IEnumerable<T> 但也提供一组不同的公共查询方法。 例如,假设一个泛型类Table实现 IEnumerable<T> 并具有自己的方法(如 Where、 Select和 SelectMany),对 的Where调用将调用 的公共WhereTable方法。 
              Table表示数据库表的类型可以有一个Where方法,该方法采用谓词参数作为表达式树,并将该树转换为 SQL 以便远程执行。 如果不需要远程执行(例如,因为谓词调用本地方法), AsEnumerable 则可以使用 方法隐藏自定义方法,并改为使标准查询运算符可用。