Queryable.OfType<TResult>(IQueryable) 方法

定义

根据指定类型筛选 IQueryable 的元素。Filters the elements of an IQueryable based on a specified type.

public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ OfType(System::Linq::IQueryable ^ source);
public static System.Linq.IQueryable<TResult> OfType<TResult> (this System.Linq.IQueryable source);
static member OfType : System.Linq.IQueryable -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function OfType(Of TResult) (source As IQueryable) As IQueryable(Of TResult)

类型参数

TResult

筛选序列元素所根据的类型。The type to filter the elements of the sequence on.

参数

source
IQueryable

要对其元素进行筛选的 IQueryableAn IQueryable whose elements to filter.

返回

IQueryable<TResult>

一个集合,包含 source 中的类型为 TResult 的元素。A collection that contains the elements from source that have type TResult.

异常

sourcenullsource is null.

示例

下面的代码示例演示如何使用 OfTypeMemberInfo类型的元素列表中筛选出不属于 PropertyInfo 类型的元素。The following code example demonstrates how to use OfType to filter out elements that are not of type PropertyInfo from a list of elements of type MemberInfo.

// Create a list of MemberInfo objects.
List<System.Reflection.MemberInfo> members = typeof(String).GetMembers().ToList();

// Return only those items that can be cast to type PropertyInfo.
IQueryable<System.Reflection.PropertyInfo> propertiesOnly =
    members.AsQueryable().OfType<System.Reflection.PropertyInfo>();

Console.WriteLine("Members of type 'PropertyInfo' are:");
foreach (System.Reflection.PropertyInfo pi in propertiesOnly)
    Console.WriteLine(pi.Name);

/*
    This code produces the following output:
 
    Members of type 'PropertyInfo' are:
    Chars
    Length
*/

' Create a list of MemberInfo objects.
Dim members As List(Of System.Reflection.MemberInfo) = GetType(String).GetMembers().ToList()

' Return only those items that can be cast to type PropertyInfo.
Dim propertiesOnly As IQueryable(Of System.Reflection.PropertyInfo) = _
        members.AsQueryable().OfType(Of System.Reflection.PropertyInfo)()

Dim output As New System.Text.StringBuilder
output.AppendLine("Members of type 'PropertyInfo' are:")
For Each pi As System.Reflection.PropertyInfo In propertiesOnly
    output.AppendLine(pi.Name)
Next

' Display the output.
MsgBox(output.ToString())

' This code produces the following output:

' Members of type 'PropertyInfo' are:
' Chars
' Length

注解

OfType 方法生成一个 MethodCallExpression,它表示作为构造的泛型方法调用 OfType 本身。The OfType method generates a MethodCallExpression that represents calling OfType itself as a constructed generic method. 然后,它将 MethodCallExpression 传递到 IQueryProviderCreateQuery(Expression) 方法(由 source 参数的 Provider 属性表示)。It then passes the MethodCallExpression to the CreateQuery(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因执行表示调用 OfType 的表达式树而发生的查询行为取决于 source 参数类型的实现。The query behavior that occurs as a result of executing an expression tree that represents calling OfType depends on the implementation of the type of the source parameter. 预期的行为是筛选出不属于 TResult类型的 source 中的任何元素。The expected behavior is that it filters out any elements in source that are not of type TResult.

适用于