安全导航表达式重写器

时间:2011-10-21 08:04:23

标签: c# linq expression-trees

我怎么能转换

Expression<Func<T,U>> fieldExpression = a=>a.Field1.Field2.Field3

类似

Expression<Func<T, U>> fieldExpression =
    a => a.Field1 != null 
        ? a.Field1.Field2 != null 
            ? a.Field1.Field2.Field3 
            : null 
        : null;

是否有libs或示例?

我有很多表达式&gt;看起来像

Expression<Func<T,U>> fieldExpression = a=>a.(Field1 as SomeType).Field2.Field3

它在LINQ查询中用作“虚拟字段”表达式,因此当我在Select()中使用它时,当FieldN之一为NULL时,它可以正常工作。

此表达式的另一种用法是编译Func<T,U>以从对象中提取值。因此,当我使用fieldExpression.Compile()(myObject)并且其中一个FieldN为NULL时 - 我得到了NullReferenceException

我知道,第二个表达式更通用,我只能使用它,但它更复杂,由它生成的SQL明显更慢

1 个答案:

答案 0 :(得分:0)