【发布时间】:2009-09-20 23:04:06
【问题描述】:
我很感激以前有人问过类似的问题,但我很难在以下代码中调用 Linq Where 方法。我希望使用反射来动态调用此方法,并动态构建 Where 子句中使用的委托(或 lambda)。这是一个简短的代码示例,一旦工作,将有助于形成我正在构建的解释型 DSL 的一部分。干杯。
public static void CallWhereMethod()
{
List<MyObject> myObjects = new List<MyObject>(){new MyObject{Name="Jon Simpson"}};
System.Delegate NameEquals = BuildEqFuncFor<MyObject>("Name", "Jon Simpson");
object[] atts = new object[1] ;
atts[0] = NameEquals;
var ret = typeof(List<MyObject>).InvokeMember("Where", BindingFlags.InvokeMethod, null, InstanceList,atts);
}
public static Func<T, bool> BuildEqFuncFor<T>(string prop, object val)
{
return t => t.GetType().InvokeMember(prop,BindingFlags.GetProperty,
null,t,null) == val;
}
【问题讨论】:
标签: c# linq reflection delegates lambda