我正在尝试编写一些能够从字符串动态生成lambda表达式的代码。我有一个IList
例如Person
例如
public class Persons : IList<Person>
{
List<Person> persons = new List<Person>();
.
.
.
public IEnumerable<Person> GetPersonWithMarksAbove(int mark)
{
return this.persons.Where( i => i.Results.Where(x => x.Mark >= mark).ToList().Count > 0);
}
}
Public class Person
{
List<Result> results = new List<Result>();
public List<Result> Results
{
get {return results;}
set {results= value;}
}
}
Public class Result
{
public int Mark;
}
所以我需要做的是能够创建一个动态lambda表达式来调用任何IEnumerable
方法,因为我可以在这些方法中添加大量逻辑来过滤我的IList
元素。 / p>
这就是我所拥有的:
MethodInfo containsmethod =
typeof(Persons).GetMethod("GetPersonWithMarksAbove", new Type[] { typeof(String) });
ParameterExpression p = Expression.Parameter(typeof(Persons), "p");
MethodCallExpression me = Expression.Call(p, containsmethod, Expression.Constant(8));
Expression<Func<Person, bool>> predicate = Expression.Lambda<Func<Person, bool>>(me, p);
Func<Person, bool> comp = predicate.Compile();
//persons is an object of type Persons that has been populated from the database for example
IList<Person> datasource = persons.Where(compiled).ToList();
我在创建谓词变量的行上收到以下错误:
发生了'System.ArgumentException'类型的未处理异常 System.Core.dll
附加信息:ParameterExpression类型 'Namespace.Persons'不能用于类型的委托参数 'Namespace.Person'
非常感谢任何帮助。感谢。