使用动态lambda表达式从IList调用IQueryable方法

时间:2015-08-05 02:25:08

标签: c# lambda linq-expressions

我正在尝试编写一些能够从字符串动态生成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'

非常感谢任何帮助。感谢。

0 个答案:

没有答案