【问题标题】:How to build generic type parameter如何构建泛型类型参数
【发布时间】:2010-11-22 18:29:36
【问题描述】:

我有一个问题。 如何构建泛型类型参数? 我正在尝试构建一个表达式树,并且要构建以下行:

var expression = Expression
                .Lambda<Func<T, bool>>(
                    operation,
                    new ParameterExpression[] {parameter});

所以预计我在 .Lambda> 中为 T 指定类型参数,但类型参数 T 直到运行时才知道。

请帮忙。 谢谢

【问题讨论】:

    标签: generics parameters lambda types expression-trees


    【解决方案1】:

    嗯,你可以把它写成一个通用的方法:

    public Expression<Func<T,bool>> BuildExpression<T>(...)
    {
        // Whatever you need to do
        var expression = Expression
                .Lambda<Func<T, bool>>(
                    operation,
                    new ParameterExpression[] {parameter});
    }
    

    ... 然后通过反射调用该方法。或者:

    如果不进一步了解您的要求,很难就其中哪种方法最合适提供任何建议。请编辑您的问题以提供更多详细信息。

    【讨论】:

    • 感谢您的回答。我正在尝试构建的是一个实用程序,它将在用户界面中进行的查询转换为域中的查询。问题是 UI 只看到 DTO 类而不是域,所以我必须将 linq 表达式 (personDTO x) => x.Name 转换为 (Person x)=>x.Name。不知何故,我设法解析和构建表达式。现在剩下的就是最后一步了。表达式.Lambda>。问题是我不知道参数 T - (这是真实域对象的类型参数,即(Person)),因为这个类型参数是在运行时构建的。
    • @Luka:嗯,这提供了 一些 更多信息 - 我怀疑最后的选择是最适合这里的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多