gpt4 book ai didi

c# - 表达式 问题

转载 作者:行者123 更新时间:2023-11-30 19:49:00 25 4
gpt4 key购买 nike

我希望能清楚简明地解释这一点。我有一个表达:

Expression<Func<TObject, TProperty>> expression

我正在尝试从中获取属性名称。一切都很好,花花公子 'UNTIL',遇到转换表达式(在 GetPropertyName 方法中 - 这是我想对问题进行排序的地方)即正常属性可能会出现 {e = >e.EmployeeID} 但在少数情况下,我得到的结果是 {e => Convert(e.EmployeeID)}。这实际上意味着我无法辨别正确的属性名称(我不想解析 Convert() 等异常)。

如何将表达式名称干净地提取为属性。下面是我正在使用的代码,所以请随意篡改它:

public static class ExpressionExtensions
{
public static string GetPropertyName<TObject, TProperty>(
this Expression<Func<TObject, TProperty>> expression) where TObject : class
{
if (expression.Body.NodeType == ExpressionType.Call)
{
MethodCallExpression methodCallExpression = (MethodCallExpression)expression.Body;
string name = ExpressionExtensions.GetPropertyName(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1);
}
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1);
}

private static string GetPropertyName(MethodCallExpression expression)
{
MethodCallExpression methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
{
return GetPropertyName(methodCallExpression);
}
return expression.Object.ToString();
}
}

我这样调用它:

string propertyName = expression.GetPropertyName();
// which ideally should return a value of EmployeeID or ReportsTo
// as per the usage example below

这会冒出一些任意用法,例如:

var tree = items2.AsHierarchy(e => e.EmployeeID, e => e.ReportsTo);

希望这能提供足够的信息让我摆脱困境!!

干杯

最佳答案

你的表达式树中应该有一个“convert”节点,所以你应该测试节点类型“convert”的节点,如果为真,则在转换为字符串之前更深一层。尝试这样的事情:

        public static string GetMemberName<TSource,TMember>(this Expression<Func<TSource,TMember>> memberReference)
{
MemberExpression expression = memberReference.Body as MemberExpression;
if (expression == null)
{
UnaryExpression convertexp = memberReference.Body as UnaryExpression;
if(convertexp!=null)
expression = convertexp.Operand as MemberExpression; ;
}
if(expression==null)
throw new ArgumentNullException("memberReference");

return expression.Member.Name;
}

关于c# - 表达式 <Func> 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com