C# 任何方法调用都会引发异常
我正在研究使用表达式的过滤机制,不知道如何使用Expression.call调用任何方法。下面是一个没有意义的例子,但它说明了我的问题:C# 任何方法调用都会引发异常,c#,linq,expression,C#,Linq,Expression,我正在研究使用表达式的过滤机制,不知道如何使用Expression.call调用任何方法。下面是一个没有意义的例子,但它说明了我的问题: var person = new List<String>(new[] { "Peter", "John", "Jim" }); var personQuery = person.AsQueryable(); var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method
var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();
var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);
Expression<Func<String, bool>> expr = p => p == "Amy";
// person.Any(person => person == "Amy"
var call = Expression.Call(
anyMethod,
personQuery.Expression,
expr
);
anyMethod
变量将包含泛型方法定义。即Any
在调用它之前,需要将其转换为Any
您可以通过调用anyMethod.MakeGenericMethod
提供typeof(String)
参数来实现。所以你的代码变成了
var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();
var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);
var specificMethod = anyMethod.MakeGenericMethod(typeof(String));//<--Important
Expression<Func<String, bool>> expr = p => p == "Amy";
// person.Any(person => person == "Amy"
var call = Expression.Call(
specificMethod,
personQuery.Expression,
expr
);
var person=新列表(新[]{“彼得”、“约翰”、“吉姆”});
var personQuery=person.AsQueryable();
var anyMethod=typeof(Queryable).GetMethods().FirstOrDefault(method=>method.Name==“Any”&&method.GetParameters().Count()==2);
var specificMethod=anyMethod.MakeGenericMethod(typeof(String));//p==“艾米”;
//person.Any(person=>person==“艾米”
var call=Expression.call(
具体方法,,
personQuery.Expression,
expr
);
您能为我们将异常消息文本翻译成英语吗?异常消息已翻译。
var person = new List<String>(new[] { "Peter", "John", "Jim" });
var personQuery = person.AsQueryable();
var anyMethod = typeof(Queryable).GetMethods().FirstOrDefault(method => method.Name == "Any" && method.GetParameters().Count() == 2);
var specificMethod = anyMethod.MakeGenericMethod(typeof(String));//<--Important
Expression<Func<String, bool>> expr = p => p == "Amy";
// person.Any(person => person == "Amy"
var call = Expression.Call(
specificMethod,
personQuery.Expression,
expr
);