c# - Expression.Call 中的 ToUpper()

标签 c# .net linq

下面的代码有效,但我想介绍一个 ToUpper()

var predicate =
    Expression.Lambda<Func<T, bool>>(
        Expression.Call(
            Expression.PropertyOrField(parameter, "FirstName"),
            "Contains", null,
            Expression.Constant("myvalue".ToUpper())), parameter
        );

结果是:

{Param_0 => Param_0.FirstName.Contains("MYVALUE")}

但我想要这样:

{Param_0 => Param_0.FirstName.ToUpper().Contains("MYVALUE")}

我该如何改变?

最佳答案

只需添加一个Expression.Call:

var predicate =
    Expression.Lambda<Func<T, bool>>(
        Expression.Call(
            Expression.Call( // <=== this one is new
                Expression.PropertyOrField(parameter, "FirstName"),
                "ToUpper", null),
            "Contains", null,
            Expression.Constant("myvalue".ToUpper())), parameter
        );

然后报告自己为:

Param_0 => Param_0.FirstName.ToUpper().Contains("MYVALUE")

关于c# - Expression.Call 中的 ToUpper(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986573/

相关文章:

.net - 限制 .Net CLR 内存使用

c# - Linq 查询字典抛出 System.ArgumentException : An item with the same key has already been added

c# - 无法在 C# 中将字符串解析为精确的日期时间

c# - 其中 T : class to VB

c# - 如何使用 C# 和 Open XML SDK 按部分拆分 Word 文档?

c# - 用于绑定(bind)的 Xamarin.Forms MarkupExtension

.net - 互操作:无法调用 get_Range,也无法使用 Range().Value2 返回的二维对象数组?

c# - 必须处理哪些变量? (.NET/ java )

c# - 在 LINQ 选择期间无法设置枚举属性

c# - 将两个不同的字符串列表合并到一个类列表中