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.

示例

下面的代码示例演示如何使用 OfType PropertyInfo 从类型的元素列表中筛选出不属于类型的元素 MemberInfoThe 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. 然后,它将传递 MethodCallExpressionCreateQuery(Expression) IQueryProvider 由参数的属性表示的的方法 Provider sourceIt then passes the MethodCallExpression to the CreateQuery(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

由于执行表示调用的表达式树而发生的查询行为 OfType 取决于参数类型的实现 sourceThe 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. 预期的行为是筛选出中 source 不属于类型的任何元素 TResultThe expected behavior is that it filters out any elements in source that are not of type TResult.

适用于