0的表达式树,即要Expression.Lambda>(exp,pa[])的exp" /> 0的表达式树,即要Expression.Lambda>(exp,pa[])的exp - 秒客网" />

求"xy".IndexOf("x")>0的表达式树,即要Expression.Lambda>(exp,pa[])的exp

时间:2021-09-29 02:35:44
如题

对于静态方法,可以如下执行

ParameterExpression numParam = Expression.Parameter(typeof(string), "str");
        ConstantExpression b = Expression.Constant(true, typeof(bool));
        MethodCallExpression methodCall = Expression.Call(typeof(string).GetMethod("IsNullOrEmpty"), numParam);
        BinaryExpression isEqual = Expression.NotEqual(methodCall, b);
        Expression<Func<string, bool>> lambda1 =
            Expression.Lambda<Func<string, bool>>(
                isEqual,
                new ParameterExpression[] { numParam });


对于"xy".IndexOf("x")这种应该怎么做呢?

13 个解决方案

#1


怎么没人回答的〉〉〉〉????

#2


为啥没人回答阿?
另外再问一下,接上面的代码:

string[] temp = { null, "3", "", "5", "7" };
var result = temp.Where(lambda1);
/*报错
错误 1 无法从用法中推导出方法“System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,bool>)”的类型实参。请尝试显式指定类型实参。 D:\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 34 37 ConsoleApplication1
*/

//而以下代码就正确

var result = temp.Where(str => string.IsNullOrEmpty(str) != true);

#3


难道我要悲剧了?没人回答????

#4


先帮你顶

#5


终于~~~~~

2楼的问题不用回答了,我已经知道原因了
IQueryble的时候用Expression
IEnumerable的时候用Fun

只要回答最初的就行

#6


看不懂啊,你那些类和参数我一个也没见过

#7


帮顶是可以的 

#8


"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。

#9


引用 8 楼 foren_whb 的回复:
"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。


我现在要问的就是实例方法应该怎么写Expression

#10


该回复于2010-04-15 15:21:36被版主删除

#11


引用 9 楼 starfd 的回复:
引用 8 楼 foren_whb 的回复:
"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。


我现在要问的就是实例方法应该怎么写Expression

就上面那样写,还要怎么样写??

#12


ParameterExpression numParam = Expression.Parameter(typeof(string), "str");
        ConstantExpression b = Expression.Constant(true, typeof(bool));
        MethodCallExpression methodCall = Expression.Call(typeof(string).GetMethod("IsNullOrEmpty"), numParam);
        BinaryExpression isEqual = Expression.NotEqual(methodCall, b);
        Expression<Func<string, bool>> lambda1 =
            Expression.Lambda<Func<string, bool>>(
                isEqual,
                new ParameterExpression[] { numParam });

对应的Lambel 是 
str => string.IsNullOrEmpty(str)!=true

我现在想问的是
str => str.IndexOf('a') >0

这个对应的表达式树

#13


ParameterExpression strParam = Expression.Parameter(typeof(string), "str");

        MethodInfo cMe = typeof(string).GetMethod("Contains");

        ConstantExpression ce = Expression.Constant("a",typeof(string));

        MethodCallExpression call = Expression.Call(strParam, cMe, ce);

        Expression<Func<string, bool>> lam = Expression.Lambda<Func<string, bool>>(call, strParam);

记录

#1


怎么没人回答的〉〉〉〉????

#2


为啥没人回答阿?
另外再问一下,接上面的代码:

string[] temp = { null, "3", "", "5", "7" };
var result = temp.Where(lambda1);
/*报错
错误 1 无法从用法中推导出方法“System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,bool>)”的类型实参。请尝试显式指定类型实参。 D:\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 34 37 ConsoleApplication1
*/

//而以下代码就正确

var result = temp.Where(str => string.IsNullOrEmpty(str) != true);

#3


难道我要悲剧了?没人回答????

#4


先帮你顶

#5


终于~~~~~

2楼的问题不用回答了,我已经知道原因了
IQueryble的时候用Expression
IEnumerable的时候用Fun

只要回答最初的就行

#6


看不懂啊,你那些类和参数我一个也没见过

#7


帮顶是可以的 

#8


"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。

#9


引用 8 楼 foren_whb 的回复:
"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。


我现在要问的就是实例方法应该怎么写Expression

#10


该回复于2010-04-15 15:21:36被版主删除

#11


引用 9 楼 starfd 的回复:
引用 8 楼 foren_whb 的回复:
"xy".IndexOf("x")???


string temp = "xyz";
var result = temp.IndexOf("x");

IndexOf不是静态方法,是实例方法。


我现在要问的就是实例方法应该怎么写Expression

就上面那样写,还要怎么样写??

#12


ParameterExpression numParam = Expression.Parameter(typeof(string), "str");
        ConstantExpression b = Expression.Constant(true, typeof(bool));
        MethodCallExpression methodCall = Expression.Call(typeof(string).GetMethod("IsNullOrEmpty"), numParam);
        BinaryExpression isEqual = Expression.NotEqual(methodCall, b);
        Expression<Func<string, bool>> lambda1 =
            Expression.Lambda<Func<string, bool>>(
                isEqual,
                new ParameterExpression[] { numParam });

对应的Lambel 是 
str => string.IsNullOrEmpty(str)!=true

我现在想问的是
str => str.IndexOf('a') >0

这个对应的表达式树

#13


ParameterExpression strParam = Expression.Parameter(typeof(string), "str");

        MethodInfo cMe = typeof(string).GetMethod("Contains");

        ConstantExpression ce = Expression.Constant("a",typeof(string));

        MethodCallExpression call = Expression.Call(strParam, cMe, ce);

        Expression<Func<string, bool>> lam = Expression.Lambda<Func<string, bool>>(call, strParam);

记录