AnExpression
是代表代码的代码。在调用Compile()
.
AnExpression
包含一个描述一些代码的对象图。所以示例函数:
x => x + 1
表示一个接受 1 个参数并返回表达式 (x + 1) 的函数。作为一个对象图,它是这样的:
Expression
AdditionExpression
RightValue
VariableExpression (x)
LeftValue
LiteralExpression (1)
您可以解析表达式并找出表达式各部分的名称,或者文字值是什么,或者操作是什么。一旦编译完成,它就是一个逻辑操作序列,所有元数据都会丢失。
就实体框架而言,给定一个示例表达式,如下所示:
myObjects.Where(x => x.Id > 10).ToList()
LINQ to SQLIQueryable
提供程序正在检查此表达式,查找属性名称,Id
然后查找文字值 10 以将其转换为 SQL 语句。如果这是一个函数(一个已编译的代码单元),则没有要检查的元数据,并且不可能转换为 SQL。它还允许您将事物解构为支持和不支持的表达式,以确保您的 SQL 查询仅返回请求的数据,而不是大型数据集。