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# Linq表达式-设置嵌套属性值_C#_Linq - Fatal编程技术网

C# Linq表达式-设置嵌套属性值

C# Linq表达式-设置嵌套属性值,c#,linq,C#,Linq,我一直在使用以下方法将某些属性设置为null,效果非常好: public static void Detach<TObject>(TObject parentObj, params Expression<Func<TObject, object>>[] detachEntities) { foreach (var detachEntity in detachEntities) { var

我一直在使用以下方法将某些属性设置为
null
,效果非常好:

    public static void Detach<TObject>(TObject parentObj, params Expression<Func<TObject, object>>[] detachEntities)
    {
        foreach (var detachEntity in detachEntities)
        {
            var prop = (PropertyInfo)((MemberExpression)detachEntity.Body).Member;
            prop.SetValue(parentObj, null);
        }
    }
-或-

因此,我试图获取表达式中的每个属性,并将其值设置为
null

任何协助都将不胜感激。
谢谢

好吧,这可能不是完美的,但它起作用了——我愿意接受任何改进:

public static void Detach<TObject>(TObject parentObj, params Expression<Func<TObject, object>>[] detachEntities)
        {
            foreach (var detachEntity in detachEntities)
            {
                var methodCallExpression = detachEntity.Body as MethodCallExpression;
                var member = methodCallExpression?.Arguments[0] as MemberExpression;
                PropertyInfo prop;
                if (member != null)
                {
                    prop = (PropertyInfo)member.Member;
                    prop.SetValue(parentObj, null);
                }

                var memberExpression = detachEntity.Body as MemberExpression;
                var expression = memberExpression?.Expression as MemberExpression;                

                switch (memberExpression?.Expression.NodeType)
                {
                    case ExpressionType.Parameter:
                        prop = (PropertyInfo)memberExpression.Member;
                        prop.SetValue(parentObj, null);
                        break;
                    case ExpressionType.MemberAccess:
                        if (expression != null)
                        {
                            prop = (PropertyInfo)expression.Member;
                            prop.SetValue(parentObj, null);
                        }
                        break;
                }               
            }
        }
publicstaticvoiddetach(TObject parentObj,params Expression[]detachEntities)
{
foreach(detachEntities中的var detachEntity)
{
var methodCallExpression=detachEntity.Body作为methodCallExpression;
var member=methodCallExpression?.Arguments[0]作为MemberExpression;
不动产不动产;
如果(成员!=null)
{
prop=(PropertyInfo)member.member;
prop.SetValue(parentObj,null);
}
var memberExpression=detachEntity.Body作为memberExpression;
var表达式=memberExpression?表达式作为memberExpression;
开关(memberExpression?.Expression.NodeType)
{
大小写表达式类型。参数:
prop=(PropertyInfo)memberExpression.Member;
prop.SetValue(parentObj,null);
打破
case ExpressionType.MemberAccess:
if(表达式!=null)
{
prop=(PropertyInfo)expression.Member;
prop.SetValue(parentObj,null);
}
打破
}               
}
}

好的,这可能不是完美的,但它起作用了-我愿意接受任何改进:

public static void Detach<TObject>(TObject parentObj, params Expression<Func<TObject, object>>[] detachEntities)
        {
            foreach (var detachEntity in detachEntities)
            {
                var methodCallExpression = detachEntity.Body as MethodCallExpression;
                var member = methodCallExpression?.Arguments[0] as MemberExpression;
                PropertyInfo prop;
                if (member != null)
                {
                    prop = (PropertyInfo)member.Member;
                    prop.SetValue(parentObj, null);
                }

                var memberExpression = detachEntity.Body as MemberExpression;
                var expression = memberExpression?.Expression as MemberExpression;                

                switch (memberExpression?.Expression.NodeType)
                {
                    case ExpressionType.Parameter:
                        prop = (PropertyInfo)memberExpression.Member;
                        prop.SetValue(parentObj, null);
                        break;
                    case ExpressionType.MemberAccess:
                        if (expression != null)
                        {
                            prop = (PropertyInfo)expression.Member;
                            prop.SetValue(parentObj, null);
                        }
                        break;
                }               
            }
        }
publicstaticvoiddetach(TObject parentObj,params Expression[]detachEntities)
{
foreach(detachEntities中的var detachEntity)
{
var methodCallExpression=detachEntity.Body作为methodCallExpression;
var member=methodCallExpression?.Arguments[0]作为MemberExpression;
不动产不动产;
如果(成员!=null)
{
prop=(PropertyInfo)member.member;
prop.SetValue(parentObj,null);
}
var memberExpression=detachEntity.Body作为memberExpression;
var表达式=memberExpression?表达式作为memberExpression;
开关(memberExpression?.Expression.NodeType)
{
大小写表达式类型。参数:
prop=(PropertyInfo)memberExpression.Member;
prop.SetValue(parentObj,null);
打破
case ExpressionType.MemberAccess:
if(表达式!=null)
{
prop=(PropertyInfo)expression.Member;
prop.SetValue(parentObj,null);
}
打破
}               
}
}
public static void Detach<TObject>(TObject parentObj, params Expression<Func<TObject, object>>[] detachEntities)
        {
            foreach (var detachEntity in detachEntities)
            {
                var methodCallExpression = detachEntity.Body as MethodCallExpression;
                var member = methodCallExpression?.Arguments[0] as MemberExpression;
                PropertyInfo prop;
                if (member != null)
                {
                    prop = (PropertyInfo)member.Member;
                    prop.SetValue(parentObj, null);
                }

                var memberExpression = detachEntity.Body as MemberExpression;
                var expression = memberExpression?.Expression as MemberExpression;                

                switch (memberExpression?.Expression.NodeType)
                {
                    case ExpressionType.Parameter:
                        prop = (PropertyInfo)memberExpression.Member;
                        prop.SetValue(parentObj, null);
                        break;
                    case ExpressionType.MemberAccess:
                        if (expression != null)
                        {
                            prop = (PropertyInfo)expression.Member;
                            prop.SetValue(parentObj, null);
                        }
                        break;
                }               
            }
        }