从函数调用问题返回表达式Lambda



我需要在下面有这个函数,如果枚举值是C,它只是在第二个lambda值中放置布尔值为真,而不是从用户属性中检索。

public static Expression<Func<User, bool>> IsValid(this Component.ValueEnum component)
{
return component switch
{
Component.ValueEnum.A => u:User => u.token.x.IsValid,
Component.ValueEnum.B => u:User => u.token.y.IsValid,
Component.ValueEnum.C => u:User => true,                                            
_ => throw new ArgumentException($"unrecognized component {component}")
};
}

然而,当我尝试这样做时,它抛出异常:

系统。InvalidOperationException:无法确定u =&gt的序列化信息;真正的

我做错了什么?这可能吗?

更新1:

好的,我看到这行是不可能的:

Component.ValueEnum.C =比;u:用户=比;真正的

生成的Lambda被用来过滤User的集合,这是一个非法的操作。

为了简化,我删除了Expression作为返回类型。如果您需要的只是一个lambda函数,它接受User并直接返回bool或使用User,那么以下代码更改可能会对您有所帮助-

public static Func<User, bool> IsValid(this Component.ValueEnum component)
{
return component switch
{
Component.ValueEnum.A => (User u) => u.token.x.IsValid,
Component.ValueEnum.B => (User u) => u.token.y.IsValid,
Component.ValueEnum.C => (User u) => true,                                            
_ => throw new ArgumentException($"unrecognized component {component}")
};
}

最新更新