Поделиться через


Queryable.OfType<TResult>(IQueryable) Метод

Определение

Выполняет фильтрацию элементов объекта IQueryable по заданному типу.

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

Тип, по которому фильтруются элементы последовательности.

Параметры

source
IQueryable

Объект IQueryable, элементы которого следует фильтровать.

Возвращаемое значение

IQueryable<TResult>

Коллекция элементов последовательности source, имеющих тип TResult.

Исключения

source имеет значение null.

Примеры

В следующем примере кода показано, как использовать для OfType фильтрации элементов, которые не относятся к типу PropertyInfo , из списка элементов типа 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 как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов OfType , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что он отфильтровывает все элементы в source , которые не относятся к типу TResult.

Применяется к