在表达式树LINQ中调用ToUpper

时间:2015-01-11 07:26:28

标签: vb.net linq expression-trees toupper

我想创建这个LINQ查询:

    Result = Result.Where(Function(Row) Convert.ToString(Row(0)).ToUpper = "TEST")

我已经有了这个查询:

Result = Result.Where(Function(Row) Convert.ToString(Row(0)) = "TEST")  

使用此代码:

expr = Expression.Call(whereMethod, Result.AsQueryable.Expression,
       Expression.Lambda(Expression.Equal(Expression.Call(convertMethod, Expression.ArrayAccess(rowParameter, Expression.Constant(index))),
       Expression.Constant(constant)), rowParameter))

convertMethod代表Convert.ToStringindex的值为0,constant的值为" TEST"。

现在,我想在此表达式中添加ToUpper方法。

我宣布了这个:

convertMethod_toupper = GetType(String).GetMethod("ToUpper", New Type() {GetType(Object)}

我发现了这个:ToUpper in an Expression call

我还应该在Convert.ToString(Row(0))之后再次调用Expression.Call调用ToUpper方法。但是如何?

感谢。

编辑:与此同时,我发现,这也会返回null:

convertMethod_toupper = GetType(String).GetMethod("ToUpper", New Type() {GetType(Object)})

这有什么问题?

如果这不应该为空,我想,这应该有效:

expr = Expression.Call(whereMethod, Result.AsQueryable.Expression,
       Expression.Lambda(Expression.Equal(Expression.Call(Expression.Call(convertMethod, Expression.ArrayAccess(rowParameter, Expression.Constant(index))), convertMethod_toupper),
       Expression.Constant(constant)), rowParameter))

EDIT2:我明白了。

convertMethod_toupper = GetType(String).GetMethod("ToUpper", System.Type.EmptyTypes)

和上面的表达式(在edit1中)有效。

0 个答案:

没有答案