Expression<TDelegate> Expression<TDelegate> Expression<TDelegate> Expression<TDelegate> Class

Definizione

Rappresenta un'espressione lambda fortemente tipizzata come una struttura di dati sotto forma di un albero delle espressioni.Represents a strongly typed lambda expression as a data structure in the form of an expression tree. Questa classe non può essere ereditata.This class cannot be inherited.

generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
    inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression

Parametri di tipo

TDelegate

Il tipo del delegato che il Expression<TDelegate> rappresenta.The type of the delegate that the Expression<TDelegate> represents.

Ereditarietà
Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>

Esempi

Esempio di codice seguente viene illustrato come rappresentare un'espressione lambda come codice eseguibile sotto forma di un delegato e come i dati sotto forma di un albero delle espressioni.The following code example demonstrates how to represent a lambda expression both as executable code in the form of a delegate and as data in the form of an expression tree. Viene inoltre illustrato come abilitare nuovamente l'albero delle espressioni nel codice eseguibile mediante l'utilizzo di Compile (metodo).It also demonstrates how to turn the expression tree back into executable code by using the Compile method.


// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/*  This code produces the following output:

    deleg(4) = True
    deleg2(4) = True
*/


' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))

' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))

' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True

Commenti

Quando un'espressione lambda viene assegnata a una variabile, un campo o un parametro di tipo Expression<TDelegate>, il compilatore genera le istruzioni per compilare un albero delle espressioni.When a lambda expression is assigned to a variable, field, or parameter whose type is Expression<TDelegate>, the compiler emits instructions to build an expression tree.

Nota

Una conversione da un'espressione lambda per digitare Expression<D> (Expression(Of D) in Visual Basic) è presente se la conversione dall'espressione lambda a un delegato di tipo D esiste.A conversion from a lambda expression to type Expression<D> (Expression(Of D) in Visual Basic) exists if a conversion from the lambda expression to a delegate of type D exists. Tuttavia, la conversione non riesce, ad esempio, se il corpo dell'espressione lambda è un blocco.However, the conversion may fail, for example, if the body of the lambda expression is a block. Ciò significa che i delegati e gli alberi delle espressioni si comportano allo stesso modo per quanto riguarda la risoluzione dell'overload.This means that delegates and expression trees behave similarly with regard to overload resolution.

L'albero delle espressioni è una rappresentazione in memoria i dati dell'espressione lambda.The expression tree is an in-memory data representation of the lambda expression. L'albero delle espressioni rende la struttura dell'espressione lambda trasparente ed esplicito.The expression tree makes the structure of the lambda expression transparent and explicit. È possibile interagire con i dati nell'albero delle espressioni, proprio come con qualunque altra struttura di dati.You can interact with the data in the expression tree just as you can with any other data structure.

La possibilità di trattare le espressioni come strutture dei dati consente alle API ricevere il codice utente in un formato che può essere ispezionato, trasformato e Processato in modo personalizzato.The ability to treat expressions as data structures enables APIs to receive user code in a format that can be inspected, transformed, and processed in a custom manner. Ad esempio, il LINQ to SQLLINQ to SQL implementazione dell'accesso ai dati utilizza questa funzionalità per convertire gli alberi delle espressioni di istruzioni Transact-SQL che possono essere valutate dal database.For example, the LINQ to SQLLINQ to SQL data access implementation uses this facility to translate expression trees to Transact-SQL statements that can be evaluated by the database.

Molti operatori query standard definiti nel Queryable classe dispone di uno o più parametri di tipo Expression<TDelegate>.Many standard query operators defined in the Queryable class have one or more parameters of type Expression<TDelegate>.

Il NodeType di un' Expression<TDelegate> è Lambda.The NodeType of an Expression<TDelegate> is Lambda.

Usare la Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) oppure Lambda<TDelegate>(Expression, ParameterExpression[]) metodo per creare un Expression<TDelegate> oggetto.Use the Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) or Lambda<TDelegate>(Expression, ParameterExpression[]) method to create an Expression<TDelegate> object.

Metodi

Accept(ExpressionVisitor) Accept(ExpressionVisitor) Accept(ExpressionVisitor) Accept(ExpressionVisitor)

Invia al metodo Visit specifico per questo tipo di nodo.Dispatches to the specific visit method for this node type. Ad esempio, MethodCallExpression chiama VisitMethodCall(MethodCallExpression).For example, MethodCallExpression calls the VisitMethodCall(MethodCallExpression).

(Inherited from Expression)
Compile() Compile() Compile() Compile()

Compila l'espressione lambda descritta dall'albero delle espressioni nel codice eseguibile e produce un delegato che rappresenta l'espressione lambda.Compiles the lambda expression described by the expression tree into executable code and produces a delegate that represents the lambda expression.

Compile(Boolean) Compile(Boolean) Compile(Boolean) Compile(Boolean)

Compila l'espressione lambda descritta dall'albero delle espressioni nel codice interpretato o compilato e produce un delegato che rappresenta l'espressione lambda.Compiles the lambda expression described by the expression tree into interpreted or compiled code and produces a delegate that represents the lambda expression.

Compile(DebugInfoGenerator) Compile(DebugInfoGenerator) Compile(DebugInfoGenerator) Compile(DebugInfoGenerator)

Produce un delegato che rappresenta l'espressione lambda.Produces a delegate that represents the lambda expression.

CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder)

Compila il lambda in una definizione del metodo.Compiles the lambda into a method definition.

(Inherited from LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator)

Compila il lambda in una definizione del metodo e informazioni di debug personalizzate.Compiles the lambda into a method definition and custom debug information.

(Inherited from LambdaExpression)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
Reduce() Reduce() Reduce() Reduce()

Riduce questo nodo a un'espressione più semplice.Reduces this node to a simpler expression. Se CanReduce restituisce true, deve essere restituita un'espressione valida.If CanReduce returns true, this should return a valid expression. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.This method can return another node which itself must be reduced.

(Inherited from Expression)
ReduceAndCheck() ReduceAndCheck() ReduceAndCheck() ReduceAndCheck()

Riduce questo nodo a un'espressione più semplice.Reduces this node to a simpler expression. Se CanReduce restituisce true, deve essere restituita un'espressione valida.If CanReduce returns true, this should return a valid expression. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.This method can return another node which itself must be reduced.

(Inherited from Expression)
ReduceExtensions() ReduceExtensions() ReduceExtensions() ReduceExtensions()

Riduce l'espressione a un tipo di nodo noto (diverso da un nodo di estensione) o restituisce solo l'espressione se è già un tipo noto.Reduces the expression to a known node type (that is not an Extension node) or just returns the expression if it is already a known type.

(Inherited from Expression)
ToString() ToString() ToString() ToString()

Restituisce una rappresentazione testuale di Expression.Returns a textual representation of the Expression.

(Inherited from Expression)
Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>)

Crea una nuova espressione simile a questa, ma che usa gli elementi figlio specificati.Creates a new expression that is like this one, but using the supplied children. Se tutti gli elementi figlio sono uguali, verrà restituita questa espressione.If all of the children are the same, it will return this expression.

VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor)

Riduce il nodo, quindi chiama il delegato del visitatore sull'espressione ridotta.Reduces the node and then calls the visitor delegate on the reduced expression. Se il nodo non è riducibile, il metodo genera un'eccezione.The method throws an exception if the node is not reducible.

(Inherited from Expression)

Proprietà

Body Body Body Body

Ottiene il corpo dell'espressione lambda.Gets the body of the lambda expression.

(Inherited from LambdaExpression)
CanReduce CanReduce CanReduce CanReduce

Indica che il nodo può essere ridotto a un nodo più semplice.Indicates that the node can be reduced to a simpler node. Se restituisce true, è possibile chiamare Reduce() per generare la forma ridotta.If this returns true, Reduce() can be called to produce the reduced form.

(Inherited from Expression)
Name Name Name Name

Ottiene il nome dell'espressione lambda.Gets the name of the lambda expression.

(Inherited from LambdaExpression)
NodeType NodeType NodeType NodeType

Restituisce il tipo di nodo di Expression.Returns the node type of this Expression.

(Inherited from LambdaExpression)
Parameters Parameters Parameters Parameters

Ottiene i parametri dell'espressione lambda.Gets the parameters of the lambda expression.

(Inherited from LambdaExpression)
ReturnType ReturnType ReturnType ReturnType

Ottiene il tipo di ritorno dell'espressione lambda.Gets the return type of the lambda expression.

(Inherited from LambdaExpression)
TailCall TailCall TailCall TailCall

Ottiene il valore che indica se l'espressione lambda sarà compilata con l'ottimizzazione della chiamata tail.Gets the value that indicates if the lambda expression will be compiled with the tail call optimization.

(Inherited from LambdaExpression)
Type Type Type Type

Ottiene il tipo statico dell'espressione rappresentata da Expression.Gets the static type of the expression that this Expression represents.

(Inherited from LambdaExpression)

Si applica a

Vedi anche