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;
}
}
}