gpt4 book ai didi

c# - 使用各种类属性返回 Expression<>

转载 作者:太空狗 更新时间:2023-10-29 21:45:16 26 4
gpt4 key购买 nike

我有这样的东西:

public Expression<Func<Message, bool>> FilterData()
{
switch (this.operatorEnum)
{
case FilterParameterOperatorEnum.EqualTo:
return message => !string.IsNullOrEmpty(message.Body) &&
message.Body
.Equals(this.value, StringComparison.InvariantCultureIgnoreCase);

case FilterParameterOperatorEnum.NotEqualTo:

return message => !string.IsNullOrEmpty(message.Body) &&
!message.Body
.Equals(this.value, StringComparison.InvariantCultureIgnoreCase);

case FilterParameterOperatorEnum.Contains:

return message =>
!string.IsNullOrEmpty(message.Body) &&
message.Body.IndexOf(this.value,
StringComparison.InvariantCultureIgnoreCase) >= 0;

case FilterParameterOperatorEnum.DoesNotContain:
return message =>
!string.IsNullOrEmpty(message.Body) &&
message.Body.IndexOf(this.value,
StringComparison.InvariantCultureIgnoreCase) == -1;


}
}

如您所见,这是在 Message.Body 上完成的

我现在要对 Message 类的其他字符串属性做同样的事情,我不想重复所有这些代码。

有没有办法通过以某种方式传入属性来做到这一点?

最佳答案

将检索属性值的表达式排除在单独的 lambda 表达式中:

public Expression<Func<Message, bool>> FilterData(Func<Message, string> retrievePropValueFunc)

然后在您的过滤器表达式中,您可以调用该新的 lambda 表达式(仅举一个例子):

return message => !string.IsNullOrEmpty(retrievePropValueFunc(message))
&& retrievePropValueFunc(message)
.Equals(this.value, StringComparison.InvariantCultureIgnoreCase);

要获取 Body 属性,将 message => message.Body 传递给 retrievePropValueFunc 参数;如您所见,您可以修改它以传递不同的 lambda 表达式来检索其他属性。

关于c# - 使用各种类属性返回 Expression<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16666942/

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