Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 安全导航表达式重写器_C#_Linq_Expression Trees - Fatal编程技术网

C# 安全导航表达式重写器

C# 安全导航表达式重写器,c#,linq,expression-trees,C#,Linq,Expression Trees,我怎样才能改变信仰 Expression<Func<T,U>> fieldExpression = a=>a.Field1.Field2.Field3 Expression fieldExpression=a=>a.Field1.Field2.Field3 差不多 Expression<Func<T, U>> fieldExpression = a => a.Field1 != null ? a.Field

我怎样才能改变信仰

Expression<Func<T,U>> fieldExpression = a=>a.Field1.Field2.Field3
Expression 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;
表达式字段表达式=
a=>a.Field1!=无效的
? a、 Field1.Field2!=无效的
? a、 字段1.Field2.Field3
:null
:null;
是否有LIB或示例

我有很多表情>看起来像

Expression<Func<T,U>> fieldExpression = a=>a.(Field1 as SomeType).Field2.Field3
Expression fieldExpression=a=>a.(Field1作为SomeType)。Field2.Field3
它在LINQ查询中用作“虚拟字段”表达式,因此当我在
Select()
中使用它时,当其中一个FieldN为NULL时,它工作正常

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


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

我有一篇博客文章介绍如何做到这一点:

我有一篇博客文章介绍如何做到这一点: