【发布时间】:2017-03-18 14:06:20
【问题描述】:
TL;DR
如何在哪里创建Expression
Expression.NodeType == ExpresionType.IsTrue || ExpresionType.IsFalse
背景资料
我正在创建 EnumerableQuery 的自定义版本,我在其中重写所有表达式以处理 Null 检查。这样当单元测试 EF Linq2Sql 代码作为 Linq2Objects 时,访问的null 导航属性不会抛出异常,而是优雅地处理它。
我正在尝试为所有ExpressionType 成员实施测试。如何创建表达式语法来创建 ExpressionType.IsTrue 和 ExpressionType.IsFalse 节点。
尝试 1.x => x
Where 子句:
queryable.Where(x => x.L1.L2.L3.L4.L5.Boolean);
返回
ExpressionType.MemberAccess
尝试 2.x => !(x && y)
以下Where 子句:
queryable.Where(x => !(x.L1.L2.L3.L4.L5.Boolean && x.L1.L2.L3.L4.L5.Boolean));
返回
ExpressionType.Not
ExpressionType.AndAlso
Left = ExpressionType.MemberAccess
Right = ExpressionType.MemberAccess
尝试 3.x => 真
Where 子句
queryable.Where(x => true);
返回
ExpressionType.Constant
评论
我猜这些ExpressionType 仅在手动创建表达式树时使用,并且希望返回类似于ExpressionType.Constant(true) 但开销较小的表达式?
【问题讨论】:
标签: c# .net compilation expression linq-expressions