Queryable.OfType(IQueryable) Queryable.OfType(IQueryable) Queryable.OfType(IQueryable) Queryable.OfType(IQueryable) Method

定义

根据指定类型筛选 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 IQueryable IQueryable IQueryable

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

返回

IQueryable<TResult>

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

异常

示例

下面的代码示例演示如何使用OfType从类型MemberInfo的元素列表中筛选出不属于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

注解

方法生成一个MethodCallExpression , 它表示调用OfType自身作为构造的泛型方法。 OfTypeThe OfType method generates a MethodCallExpression that represents calling OfType itself as a constructed generic method. 然后, 它将MethodCallExpression传递CreateQuery(Expression)给由Provider source参数的IQueryProvider属性表示的的方法。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. 预期的行为是筛选出中source不属于类型TResult的任何元素。The expected behavior is that it filters out any elements in source that are not of type TResult.

适用于