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

Definición

Representa una expresión lambda fuertemente tipada como una estructura de datos en el formato de árbol de expresión.Represents a strongly typed lambda expression as a data structure in the form of an expression tree. Esta clase no puede heredarse.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

Parámetros de tipo

TDelegate

Tipo de delegado que Expression<TDelegate> representa.The type of the delegate that the Expression<TDelegate> represents.

Herencia
Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>

Ejemplos

En el ejemplo de código siguiente se muestra cómo representar una expresión lambda como código ejecutable en forma de delegado y como datos en forma de árbol de expresión.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. También se muestra cómo volver a activar el árbol de expresión en el código ejecutable mediante el Compile método.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

Comentarios

Cuando una expresión lambda se asigna a una variable, campo o parámetro cuyo tipo es Expression<TDelegate>, el compilador emite instrucciones para generar un árbol de expresión.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

Existe una conversión de una expresión lambda al Expression<D> tipoExpression(Of D) (en Visual Basic) si existe una conversión de la expresión lambda a un delegado de D tipo.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. Sin embargo, se puede producir un error en la conversión, por ejemplo, si el cuerpo de la expresión lambda es un bloque.However, the conversion may fail, for example, if the body of the lambda expression is a block. Esto significa que los delegados y los árboles de expresión se comportan de forma similar a la resolución de sobrecarga.This means that delegates and expression trees behave similarly with regard to overload resolution.

El árbol de expresión es una representación de datos en memoria de la expresión lambda.The expression tree is an in-memory data representation of the lambda expression. El árbol de expresión hace que la estructura de la expresión lambda sea transparente y explícita.The expression tree makes the structure of the lambda expression transparent and explicit. Puede interactuar con los datos en el árbol de expresión tal como lo haría con cualquier otra estructura de datos.You can interact with the data in the expression tree just as you can with any other data structure.

La capacidad de tratar expresiones como estructuras de datos permite que las API reciban código de usuario en un formato que se pueda inspeccionar, transformar y procesar de forma personalizada.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. Por ejemplo, la LINQ to SQLLINQ to SQL implementación de acceso a datos usa esta función para convertir los árboles de expresión en instrucciones Transact-SQL que pueden ser evaluadas por la base de datos.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.

Muchos operadores de consulta estándar definidos en Queryable la clase tienen uno o más parámetros de Expression<TDelegate>tipo.Many standard query operators defined in the Queryable class have one or more parameters of type Expression<TDelegate>.

De un Expression<TDelegate> esLambda. NodeTypeThe NodeType of an Expression<TDelegate> is Lambda.

Use el Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) método Lambda<TDelegate>(Expression, ParameterExpression[]) o para crear un Expression<TDelegate> objeto.Use the Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) or Lambda<TDelegate>(Expression, ParameterExpression[]) method to create an Expression<TDelegate> object.

Métodos

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

Envía la expresión al método de visita específico de este tipo de nodo.Dispatches to the specific visit method for this node type. Por ejemplo, MethodCallExpression llama a VisitMethodCall(MethodCallExpression).For example, MethodCallExpression calls the VisitMethodCall(MethodCallExpression).

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

Compila la expresión lambda descrita por el árbol de la expresión en el código ejecutable y genera un delegado que representa la expresión 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 la expresión lambda descrita por el árbol de expresión en el código interpretado o compilado y genera a un delegado que representa la expresión 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)

Genera un delegado que representa la expresión lambda.Produces a delegate that represents the lambda expression.

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

Compila el lambda en una definición de método.Compiles the lambda into a method definition.

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

Compila el lambda en una definición de método e información de depuración personalizada.Compiles the lambda into a method definition and custom debug information.

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

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

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

Sirve como la función hash predeterminada.Serves as the default hash function.

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

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

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

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

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

Reduce este nodo a una expresión más simple.Reduces this node to a simpler expression. Si CanReduce devuelve true, debería devolver una expresión válida.If CanReduce returns true, this should return a valid expression. Este método puede devolver otro nodo que se debe reducir a su vez.This method can return another node which itself must be reduced.

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

Reduce este nodo a una expresión más simple.Reduces this node to a simpler expression. Si CanReduce devuelve true, debería devolver una expresión válida.If CanReduce returns true, this should return a valid expression. Este método puede devolver otro nodo que se debe reducir a su vez.This method can return another node which itself must be reduced.

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

Reduce la expresión a un tipo de nodo conocido (no es un nodo de extensión) o, si ya es un tipo conocido, solo devuelve la expresión.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()

Devuelve una representación textual de 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 nueva expresión que es como esta, pero usa el elemento secundario proporcionado.Creates a new expression that is like this one, but using the supplied children. Si todos los elementos secundarios son iguales, devolverá esta expresión.If all of the children are the same, it will return this expression.

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

Reduce el nodo y, a continuación, llama al delegado del visitante en la expresión reducida.Reduces the node and then calls the visitor delegate on the reduced expression. El método inicia una excepción si el nodo no es reducible.The method throws an exception if the node is not reducible.

(Inherited from Expression)

Propiedades

Body Body Body Body

Obtiene el cuerpo de la expresión lambda.Gets the body of the lambda expression.

(Inherited from LambdaExpression)
CanReduce CanReduce CanReduce CanReduce

Indica que el nodo se puede reducir a uno más simple.Indicates that the node can be reduced to a simpler node. Si devuelve true, se puede llamar a Reduce() para generar el formulario reducido.If this returns true, Reduce() can be called to produce the reduced form.

(Inherited from Expression)
Name Name Name Name

Obtiene el nombre de la expresión lambda.Gets the name of the lambda expression.

(Inherited from LambdaExpression)
NodeType NodeType NodeType NodeType

Devuelve el tipo de nodo de Expression.Returns the node type of this Expression.

(Inherited from LambdaExpression)
Parameters Parameters Parameters Parameters

Obtiene los parámetros de la expresión lambda.Gets the parameters of the lambda expression.

(Inherited from LambdaExpression)
ReturnType ReturnType ReturnType ReturnType

Obtiene el tipo de valor devuelto de la expresión lambda.Gets the return type of the lambda expression.

(Inherited from LambdaExpression)
TailCall TailCall TailCall TailCall

Obtiene el valor que indica si la expresión lambda se compilará con la optimización de llamada de cola.Gets the value that indicates if the lambda expression will be compiled with the tail call optimization.

(Inherited from LambdaExpression)
Type Type Type Type

Obtiene el tipo estático de la expresión que Expression representa.Gets the static type of the expression that this Expression represents.

(Inherited from LambdaExpression)

Se aplica a

Consulte también: